Maison > développement back-end > Golang > Comment puis-je obtenir le nom d'un champ Struct à l'aide de Go Reflection ?

Comment puis-je obtenir le nom d'un champ Struct à l'aide de Go Reflection ?

DDD
Libérer: 2024-12-08 17:13:11
original
624 Les gens l'ont consulté

How Can I Get the Name of a Struct Field Using Go Reflection?

Détermination du nom du champ de structure à l'aide de la réflexion

Dans Go, il est possible d'accéder et de manipuler les champs de structure de manière dynamique à l'aide de la réflexion. Cependant, un défi courant consiste à déterminer le nom d'un champ de structure particulier.

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())
}
Copier après la connexion

Dans ce code, un pointeur vers une structure A est créé et le la valeur est accessible en utilisant la réflexion. Cependant, fmt.Println(val.Field(0).Type().Name()) imprime "string" au lieu de "Foo".

Solution

Pour récupérer le nom d'un champ, vous devez utiliser Field(0).Name au lieu de Type().Name(). Le code suivant montre comment procéder :

fmt.Println(val.Field(0).Name())
Copier après la connexion

La méthode Name sur réflexion.StructField fournit le nom réel du champ, qui est "Foo".

Autres considérations

Il est important de noter que Field(0) fait référence au premier champ de la structure. Si vous avez besoin d'obtenir le nom d'un champ spécifique, vous pouvez utiliser son index.

De plus, il n'existe aucun moyen de récupérer le nom du champ pour une réflexion.Valeur représentant une valeur de champ particulière. Ces informations ne sont pas stockées dans la valeur du champ elle-même mais plutôt dans la structure contenant.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal