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

go 通过 structtag 反射查找

go 通过 structtag 反射查找

Go
宝慕林4294392 2023-07-10 16:28:33
type A struct {    Name *NameS `json:"name"`}对于结构 A,是否有一种方法可以通过 structtag 找到字段,例如reflect.ValueOf(&ns)// structs := ps.Elem()s.FieldByTag("name")
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

没有内置方法/函数可以执行此操作。中的现有FieldBy*方法reflect是作为循环实现的(参见`src/reflect/type.go)。您还可以编写一个循环来实现此处所需的功能。一种方法可能是这样的:


func fieldByTag(s interface{}, tagKey, tagValue string) (reflect.StructField, bool) {

    rt := reflect.TypeOf(s)

    for i := 0; i < rt.NumField(); i++ {

        field := rt.Field(i)

        if field.Tag.Get(tagKey) == tagValue {

            return field, true

        }

    }

    return reflect.StructField{}, false

}

请注意,tagKey和tagValue是单独传递的,因为这就是reflect.StructField工作原理。所以在你的情况下你会这样称呼它:


field, ok := fieldByTag(&ns, "json", "name")


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

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