構造体のフィールドに反映し、そのタグ値への参照を取得することは可能ですか?
例えば:
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()の範囲を超えてから、field.Tag.Get( "tagname")を呼び出すことです。ただし、私のユースケースでは、構造体全体を渡さなくて済む方がはるかに良いでしょう。アイデアはありますか?
構造体全体を渡す必要はありませんが、フィールドの1つの値を渡すだけでは不十分です。あなたの例ではuser.name
はstring
にすぎません-Reflectパッケージはそれを元の構造体に関連付ける方法を持ちません。
代わりに、指定されたフィールドのreflect.StructField
を渡す必要があります。
field, ok := reflect.TypeOf(user).Elem().FieldByName("name")
…
tag = string(field.Tag)
http://play.golang.org/p/G6wxUVVbOw を参照してください
(注:Elem
は構造体へのポインターであるため、上記のuser
を使用します)。