我的问题如下:
我有一片reflect.Value
,是从MethodByName("foo").Call()
返回的。
现在我想将包含的值转换为它们的类型,我不会静态地知道,但是以relflect.Type
的形式
基本上我想做的是:
values[0].Interface().(mytype)
但有反思
values[0].Interface().(reflect.TypeOf(responseObject))
这给了我编译错误:
reflect.TypeOf(responseObject) is not a type
有没有办法在go中执行此操作?
谢谢和问候
BillDoor
答案 0 :(得分:2)
如果你有使用普通类型断言语法的代码,如:
x := v.(mytype)
然后编译器知道变量x
的类型为mytype
,并相应地生成代码。如果该语言允许您使用表达式代替类型,那么编译器将无法知道x
的类型,因此无法生成使用该变量的代码。
如果您只知道运行时的值类型,那么您需要坚持使用reflect.Value
API。您可以使用其Type
方法确定值的类型,并且有一些方法可以访问结构字段,切片或数组中的索引等。
只有在编译时知道类型时,才能恢复到常规语法。
答案 1 :(得分:1)
什么是演员表(类型断言)?它有两个影响:
显然,#1对于编译时未知的类型没有意义,因为编译时类型的某些东西如何依赖于编译时未知的东西?
对于编译时未知的类型,您仍然可以手动执行#2操作。只需使用reflect.TypeOf()
获取值的运行时类型,然后将其与您拥有的runtime.Type
进行比较。