【发布时间】:2015-07-10 01:04:39
【问题描述】:
我的问题如下:
我有一个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中做到这一点?
感谢和问候
比尔门
【问题讨论】:
-
我不能,因为我不知道静态类型
-
您打开 reflect.Type.Kind() 并相应地调用 reflect.Value.{Int,String,Float,...}()。
-
@billdoor:您应该在问题中描述您打算用
reflect.Values 的切片做什么。因为您所提议的内容以目前的形式无法完成。 -
@bildor:您确实知道 reflect.Value 可以转换为哪些类型,因为这是一个 固定 列表。当然,您不能进行动态类型转换,但是然后像我们试图解释的那样找到不同的设计。动态类型转换的整个理念是无意义的,因为生成的对象需要在编译时已知的静态类型。
-
如果您不知道静态类型,那么就没有理由进行类型断言,您可以将其留在
interface{}中。如果您要进行类型断言,那是因为您需要一个特定的已知类型。
标签: go