Иди размышляй найди structtag
type A struct {
Name *NameS `json:"name"`
}
для структуры A есть метод в отражении, что я могу найти поле с помощью structtag, как
reflect.ValueOf(&ns)
// struct
s := ps.Elem()
s.FieldByTag("name")
1 ответ
Решение
Для этого нет встроенного метода / функции. Существующий FieldBy*
методы в reflect
реализованы в виде циклов (см. `src/ отражения /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")