Maison > développement back-end > Golang > Comment récupérer des champs d'une interface à l'aide de Go Reflection ?

Comment récupérer des champs d'une interface à l'aide de Go Reflection ?

Barbara Streisand
Libérer: 2024-12-16 22:21:18
original
587 Les gens l'ont consulté

How to Retrieve Fields from an Interface Using Go Reflection?

Comment récupérer des champs d'une interface

Lors de la manipulation d'un objet de réponse ou d'une interface, il peut être nécessaire d'identifier les champs disponibles. Bien que la réflexion soit une option, il est nécessaire de connaître les noms des champs à l’avance. Cet article explore comment obtenir tous les champs accessibles depuis une interface, en utilisant la réflexion.

Utilisation de la méthode reflex.TypeOf()

Pour obtenir un descripteur de type, utilisez la fonction réflexion.TypeOf() . Ce descripteur peut être utilisé pour lister les champs de la valeur dynamique stockée dans l'interface.

Considérons l'exemple suivant :

type Point struct {
    X int
    Y int
}

var reply interface{} = Point{1, 2}
t := reflect.TypeOf(reply)
for i := 0; i < t.NumField(); i++ {
    fmt.Printf("%+v\n", t.Field(i))
}
Copier après la connexion

Sortie :

{Name:X PkgPath: Type:int Tag: Offset:0 Index:[0] Anonymous:false}
{Name:Y PkgPath: Type:int Tag: Offset:4 Index:[1] Anonymous:false}
Copier après la connexion

Chaque type L'appel .Field() renvoie un reflet.StructField, qui contient des détails tels que le nom du champ.

Récupération du champ Values

Pour obtenir les valeurs du champ, utilisez réfléchissant.ValueOf() pour obtenir un reflet.Value. Vous pouvez ensuite utiliser Value.Field() ou Value.FieldByName():

v := reflect.ValueOf(reply)
for i := 0; i < v.NumField(); i++ {
    fmt.Println(v.Field(i))
}
Copier après la connexion

Output:

1
2
Copier après la connexion

Gestion des pointeurs vers des structures

Souvent, des pointeurs vers les structures sont enveloppées dans des interfaces. Pour accéder au type ou à la valeur pointé, utilisez Type.Elem() et Value.Elem() :

t := reflect.TypeOf(reply).Elem()

v := reflect.ValueOf(reply).Elem()
Copier après la connexion

En utilisant la réflexion, vous pouvez récupérer tous les champs d'une interface, qu'ils soient explicitement ou non connu. Cela fournit un moyen puissant d’inspecter des structures de données arbitraires. Plus d'informations sur la réflexion de Go peuvent être trouvées dans l'article de blog « Les lois de la réflexion ».

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