Golang Reflection: получить тег из поля struct

Можно ли задуматься над полем структуры и получить ссылку на его значения тегов?

Например:

type User struct {
    name    string 'json:name-field'
    age     int
}
...
user := &User{"John Doe The Fourth", 20}
getStructTag(user.name)
...
func getStructTag(i interface{}) string{
   //get tag from field

}

Из того, что я вижу, обычным способом сделать это является изменение над typ.NumField(), а затем вызвать поле. Tag.Get("тэг"). Однако, в моем случае использования, было бы намного лучше не передавать всю структуру. Любые идеи?

Ответы

Ответ 1

Вам не нужно передавать всю структуру, но передать значение одного из полей недостаточно. В вашем примере user.name - это всего лишь string - пакет отражения не будет иметь никакого отношения к тому, чтобы вернуться к исходной структуре.

Вместо этого вам нужно пройти вокруг reflect.StructField для данного поля:

field, ok := reflect.TypeOf(user).Elem().FieldByName("name")
…
tag = string(field.Tag)

См. Http://play.golang.org/p/G6wxUVVbOw

(обратите внимание, мы используем Elem выше, потому что user является указателем на структуру).