Используйте отражение, чтобы получить значение тега struct field.Пакет reflect
предоставляет функции для работы с тегами, в том числе для получения значения тега
package main
import (
"log"
"encoding/json"
"reflect"
)
type Person struct {
ProfileName AltField `json:"profile_name"`
}
type AltField struct {
Val string `json:"val"`
}
func (af *AltField) UnmarshalJSON(b []byte) error {
field, ok := reflect.TypeOf(*af).FieldByName("Val")
if !ok {
panic("Field not found")
}
log.Println(string(field.Tag))
if e := json.Unmarshal(b,&af.Val); e != nil {
return e
}
return nil
}
func main() {
p := Person{}
_ = json.Unmarshal([]byte(`{"profile_name":"Af"}`),&p)
}
. Вы можете получить значение только тех тегов поля, которые имеют их.Структурное поле отражает объект должен быть создан для извлечения тегов из его полей.
Рабочий код на Детская площадка