gpt4 book ai didi

去反射(reflect)通过结构标签找到

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:14 25 4
gpt4 key购买 nike

type A struct {
Name *NameS `json:"name"`
}

对于一个struct A,有没有一种方法可以反射(reflect)我可以通过structtag找到一个字段喜欢

reflect.ValueOf(&ns)
// struct
s := ps.Elem()
s.FieldByTag("name")

最佳答案

没有内置方法/函数可以执行此操作。 reflect 中现有的 FieldBy* 方法被实现为循环(参见 `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
}

请注意,tagKeytagValue 是分开传递的,因为这就是 reflect.StructField 的工作方式。所以在你的情况下你会这样调用它:

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

关于去反射(reflect)通过结构标签找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com