Réflexion Golang: obtenir la balise du champ struct
Est-il possible de réfléchir à un champ d'une structure, et obtenir une référence à ses valeurs de balise?
Par exemple:
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
}
D'après ce que je peux voir, la façon habituelle de le faire est de dépasser typ.NumField (), puis appelez field.Balise.Get("tag"). Cependant, dans mon cas d'utilisation, il serait préférable de ne pas avoir à passer toute la structure. Des idées?
1 réponses
Vous n'avez pas besoin de passer la structure entière, mais passer la valeur de l'un des champs n'est pas suffisant. Dans votre exemple user.name
est juste un string
- le paquet reflect n'aura aucun moyen de le corréler à la structure d'origine.
Au lieu de cela, vous devez passer autour du reflect.StructField
pour le champ donné:
field, ok := reflect.TypeOf(user).Elem().FieldByName("name")
…
tag = string(field.Tag)
Voir http://play.golang.org/p/G6wxUVVbOw
(notez que nous utilisons Elem
ci-dessus car user
est un pointeur vers une structure).