为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的反射类型和值

Go中的反射类型和值

Go
眼眸繁星 2021-04-27 13:38:47
我不太清楚此代码段的行为。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())。


查看完整回答
反对 回复 2021-05-17
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信