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")
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消