去反映通过结构标签找到

go reflect find by structtag

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

对于一个struct A,有没有reflect方法可以通过structtag找到一个字段 喜欢

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

没有内置的 method/function 可以执行此操作。 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")