Maison >développement back-end >Golang >Comment accéder aux balises de champ Struct à l'aide du package Reflect de Go ?

Comment accéder aux balises de champ Struct à l'aide du package Reflect de Go ?

DDD
DDDoriginal
2024-12-16 01:02:09968parcourir

How to Access Struct Field Tags Using Go's Reflect Package?

Accès aux balises de champ Struct via le package Reflect de Go

La réflexion sur le champ d'une structure et la récupération de ses valeurs de balise peuvent être réalisées à l'aide du package Reflect de Go. Prenons l'exemple suivant :

type User struct {
    name    string `json:"name-field"`
    age     int
}

// ...

user := &User{"John Doe The Fourth", 20}
getStructTag(user.name) // How to obtain the tag value here?

SOLUTION

Il n'est pas nécessaire de transmettre l'intégralité de la structure à getStructTag. Au lieu de cela, nous pouvons utiliser la fonction reflect.TypeOf pour obtenir le type de la structure et la méthode Elem pour récupérer le type de valeur sous-jacent. Nous utilisons ensuite FieldByName pour accéder au champ de structure souhaité.

field, ok := reflect.TypeOf(user).Elem().FieldByName("name")
if !ok {
    // Handle error
}

tag := string(field.Tag)

Dans ce cas, nous utilisons Elem car l'utilisateur est un pointeur vers une structure. En accédant au champ FieldByName, on peut obtenir directement le reflet.StructField correspondant au champ "name". L'attribut Tag du champ acquis permet d'accéder à la valeur du tag.

DÉMONSTRATION

Un exemple interactif de cette technique peut être trouvé au lien suivant : [Réflexion sur une balise de champ Struct](https://play.golang.org/p/_M9Q-r1fuzq).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn