无效的类型断言:无法将os.Stdout转换为接口类型io.ReadWriter?

Troskyvs:

我指的是gopl示例代码,如下所示:

v := os.Stdout
v2 = v.(io.ReadWriter)

但是转到1.13会在其上出现报告编译错误:

invalid type assertion: v.(io.ReadWriter) (non-interface type *os.File on left)

我以为只要Stdout是作家,这种对ReadWriter的转换就应该触发运行时类型转换错误,但是实际上,报告了编译错误。

我想知道在什么情况下类型断言/转换将在编译时失败,在什么情况下它将在运行时失败?

黄药:

您已经可以使用io.ReadWriter(os.Stdout)它了,因为您已经有了指向结构的具体指针(或者也可以使用结构)。

类型断言,例如v.(*SomeConcreteType)v实现某些接口时要使用的断言,您想将其转换为具体的类型(结构/指针...)。您正尝试采用另一种方法,这就是为什么编译器抱怨非接口类型的原因。

这实际上没有任何意义,因为您唯一要做的就是限制可以调用的方法v2您仍然可以传递v一个接受a的方法,io.ReadWriter因为它实现该接口时不会进行任何转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Typescript将未知类型转换为接口类型

将具体的实现类型转换为通用接口类型

无法将实例类型转换为实例实现接口的接口类型

Typescript接口类型值转换为联合类型

将使用URLClassLoader创建的对象转换为接口类型

在VBA中强制转换为接口类型

Swift:从接口类型数组转换为对象数组崩溃

关闭无法隐式转换为通用接口类型的成员的通用接口的类的实例

使用C#和反射将接口类型转换为具体类型

将继承类型的对象列表转换为新的接口类型列表

无法将数据(类型接口{})转换为字符串类型:需要类型断言

无法将类型为“ System .__ ComObject”的COM对象转换为接口类型为“ EnvDTE.Project”

无法将类型为“ System .__ ComObject”的COM对象转换为接口类型为“ Microsoft.Office.Interop.Excel.Worksheets”

SAP:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“sapfewse.GuiTextField”

如何将二维地图从Firestore转换为Typescripts接口类型

HandlerFunc(f)如何将函数转换为接口类型?

转换为接口类型和使用类型进行简单声明之间的区别

将字节数组解组到接口,然后将该接口类型强制转换为struct不起作用?

为什么我不能将对象转换为其接口类型?

为什么在Dart中有条件地强制转换为接口类型失败?

为什么我需要在C#显式实现中将'this'转换为接口类型?

在Linq表达式中将对象转换为通用接口类型

为什么必须将类明确转换为其接口类型?

泛型类型的隐式转换失败,接口类型

T4MVC:System.InvalidCastException:无法将类型为System .__ ComObject的COM对象转换为接口类型为EnvDTE80.CodeClass2。

接口类型的变量

接口类型推断

接口类型返回

接口类型推断