golang 投射到 relfect.Type

我的问题如下:


我有一个reflect.Value从MethodByName("foo").Call().


现在我想将包含的值转换为它们的类型,我静态地不知道,但是形式为 relflect.Type


基本上我想做的是:


values[0].Interface().(mytype)

但有反思


values[0].Interface().(reflect.TypeOf(responseObject))

这给了我编译错误:


reflect.TypeOf(responseObject) is not a type

有没有办法做到这一点?


呼啦一阵风
浏览 177回答 2
2回答

qq_花开花谢_0

如果您有使用正常类型断言语法的代码,例如:x := v.(mytype)然后编译器知道该变量x的类型为mytype,并相应地生成代码。如果语言允许您使用表达式代替类型,那么编译器将无法知道什么是类型x,因此无法生成使用该变量的代码。如果您只知道运行时值的类型,那么您将需要坚持使用reflect.ValueAPI。您可以使用它的Type方法确定值的类型,并且有一些方法可以让您访问结构字段、切片或数组中的索引等。只有当你在编译时知道一个类型时,你才能回到常规语法。

慕桂英546537

什么是强制转换(类型断言)?它有两个作用:在编译时,整个类型断言表达式的编译时就是转换到的类型。在运行时,会检查值的实际运行时类型,如果它不是强制转换的类型,则会生成运行时错误。显然,#1 对于编译时未知的类型没有意义,因为某物的编译时类型如何依赖于编译时未知的东西?对于编译时未知的类型,您仍然可以手动执行 #2。只需获取使用的值的运行时类型reflect.TypeOf()并将其与runtime.Type您拥有的进行比较。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go