我试图理解反射值的表示:
type S struct {
F string `species:"gopher" color:"blue"`
}
var x float64 = 3.4
v := reflect.ValueOf(x)
fmt.Println("v = ", v) // v = 3.4
s := S{}
ss := reflect.ValueOf(s)
fmt.Println("ss = ", ss) // ss = {}
据我所知,反射接口值的表示是一个双字对,它给出了一个指向类型信息的指针和一个指向相关值的指针。
变量的反射表示是什么。它只是值,如果是,那么类型如何由下面的代码确定:
fmt.Println("type:", reflect.TypeOf(x))
如果表示只是值,就像看起来那样,上面的代码在哪里找到类型信息?
答案 0 :(得分:1)
reflect.TypeOf
的类型是:
func TypeOf(i interface{}) Type
当您在代码中致电reflect.ValueOf(x)
时,x
的值会隐式转换为interface{}
。在编译时,x
的类型已知(float64
),接口值表示为您已知的;作为一个双字对,带有指向float64
信息的指针和指向float64
值的指针(3.4)。
同样的推理适用于您的计划中的s
。
在Go中的类型之间进行了很少的隐式转换,但是在调用函数(或赋值给变量)时值和接口之间的转换是一个例外。