Maison > développement back-end > Golang > Comment puis-je récupérer les noms de champs de structure à l'aide de Go Reflection ?

Comment puis-je récupérer les noms de champs de structure à l'aide de Go Reflection ?

Barbara Streisand
Libérer: 2024-12-31 20:33:14
original
707 Les gens l'ont consulté

How Can I Retrieve Struct Field Names Using Go Reflection?

Récupération des noms de champs de structure à l'aide de la réflexion

Dans Golang, la réflexion permet d'accéder à des informations sur la structure et le comportement du programme au moment de l'exécution. Un cas d'utilisation courant consiste à récupérer les noms de champs dans une structure.

Considérons l'exemple suivant :

type A struct {
    Foo string
}

func (a *A) PrintFoo() {
    fmt.Println("Foo value is " + a.Foo)
}

func main() {
    a := &A{Foo: "afoo"}
    val := reflect.Indirect(reflect.ValueOf(a))
    fmt.Println(val.Field(0).Type().Name()) // Prints "string"
}
Copier après la connexion

L'objectif ici est d'imprimer "Foo" comme nom de champ, mais à la place, il imprime "string". Pour comprendre ce comportement, examinons le code.

Tout d'abord, reflet.Indirect(reflect.ValueOf(a)) convertit le pointeur vers la structure a en un reflet.Value représentant la valeur sous-jacente. val.Field(0) renvoie une réflexion.Value correspondant au premier champ de la structure, qui dans ce cas est Foo.

Cependant, val.Field(0).Type().Name() récupère le type du champ, qui est une chaîne. Le nom du champ lui-même peut être obtenu en utilisant :

fmt.Println(val.Type().Field(0).Name) // Prints "Foo"
Copier après la connexion

En effet, val.Type() donne accès aux informations de type de la structure et le Field(0).Name suivant récupère le nom. du premier champ.

En résumé, pour récupérer le nom d'un champ struct par réflexion, il faut utiliser val.Type().Field(0).Name plutôt que val.Field(0).Type().Name.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal