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
Barbara Streisandoriginal
2024-12-31 20:33:14701parcourir

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"
}

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"

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!

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