Reflection Go中的反射类型和值
我不太清楚这个代码片段的行为Reflection Go中的反射类型和值,reflection,go,Reflection,Go,我不太清楚这个代码片段的行为 func show(i interface{}) { switch t := i.(type) { case *Person: t := reflect.TypeOf(i) //what t contains? v := reflect.ValueOf(i) //what v contains? tag := t.Elem().Field(0).Tag name := v.Elem().Fie
func show(i interface{}) {
switch t := i.(type) {
case *Person:
t := reflect.TypeOf(i) //what t contains?
v := reflect.ValueOf(i) //what v contains?
tag := t.Elem().Field(0).Tag
name := v.Elem().Field(0).String()
}
}
反射中的类型和值之间有什么区别?reflect.TypeOf()
返回一个值,而reflect.ValueOf()返回一个值。reflect.Type
允许您查询绑定到具有相同类型的所有变量的信息,而reflect.Value
允许您查询信息并对任意类型的数据执行操作
在上面的示例中,您使用reflect.Type
获取Person结构中第一个字段的“标记”。您可以从*Person
的类型开始。要获取Person
的类型信息,请使用t.Elem()
。然后使用.field(0).tag
提取第一个字段的标记信息。您传递的实际值,i
,并不重要,因为第一个字段的标记是类型的一部分
您使用reflect.Value
获取值i
的第一个字段的字符串表示形式。首先,您使用v.Elem()
获取由i
指向的结构的值,然后访问第一个字段的数据(.Field(0)
),最后将该数据转换为字符串(.string()
)。您还应该阅读以了解有关反射的更多详细信息。