我不太清楚此代码段的行为。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() }}反射的类型和值之间有什么区别?
1 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
reflect.TypeOf()
返回一个reflect.Type并reflect.ValueOf()
返回一个reflect.Value。Areflect.Type
允许您查询绑定到具有相同类型的所有变量的信息,而A则reflect.Value
允许您查询信息和对任意类型的数据执行操作。
在上面的示例中,您使用reflect.Type
来获取Person结构中第一个字段的“标签”。您从的Type开始*Person
。要获取的类型信息Person
,您使用t.Elem()
。然后,您使用提取了有关第一个字段的标签信息.Field(0).Tag
。您传递的实际值i
无关紧要,因为第一个字段的标记是该类型的一部分。
您曾经reflect.Value
获得值的第一个字段的字符串表示形式i
。首先,您通常使用所v.Elem()
指向的结构获取值i
,然后访问第一个字段的数据(.Field(0)
),最后将数据转换为字符串(.String()
)。
- 1 回答
- 0 关注
- 176 浏览
添加回答
举报
0/150
提交
取消