Maison > développement back-end > Golang > Comment obtenir un pointeur vers une valeur à l'aide de Reflection in Go ?

Comment obtenir un pointeur vers une valeur à l'aide de Reflection in Go ?

Mary-Kate Olsen
Libérer: 2024-11-01 15:23:02
original
630 Les gens l'ont consulté

How to Get a Pointer to a Value Using Reflection in Go?

Obtenir un pointeur vers une valeur à l'aide de la réflexion

Inspecter les champs d'une interface nécessite l'utilisation de la réflexion dans Go. Cependant, des défis surviennent lorsque l’on tente de récupérer l’adresse de champs non pointeurs. Cet article aborde ces défis et propose une solution.

Dans l'exemple de code fourni, une fonction nommée InspectStruct parcourt une structure donnée et génère des détails sur chaque champ. Bien que la plupart des champs soient pris en compte, les champs sans pointeur intégrés à des niveaux supérieurs dans la structure donnent des résultats « non adressables ».

Solution

Le problème réside dans le utilisation de la méthode reflex.Value.Interface(). Pour obtenir l'adresse d'un champ non-pointeur, il est recommandé de passer Reflect.Value au lieu de interface{} à la fonction InspectStruct. Le code corrigé ci-dessous intègre ce changement :

<code class="go">func InspectStructV(val reflect.Value) {
    // ... (remaining code is identical)
}

func InspectStruct(v interface{}) {
    InspectStructV(reflect.ValueOf(v))
}</code>
Copier après la connexion

Avec cette modification, la fonction InspectStruct fonctionne comme prévu, produisant les adresses de tous les champs de la structure, quelle que soit leur profondeur ou l'état du pointeur. Cela peut être vu dans les résultats des tests mis à jour :

Field Name: Id,  Field Value: 1,     Address: 0x408125440 , Field type: int   , Field kind: int
Field Name: F,   Field Value: {2 {3}},   Address: 0x408125444 , Field type: main.V    , Field kind: struct
Field Name: Id,  Field Value: 2,     Address: 0x408125450 , Field type: int   , Field kind: int
Field Name: F,   Field Value: {3},   Address: 0x408125458 , Field type: main.Z    , Field kind: struct
Field Name: Id,  Field Value: 3,     Address: 0x408125460 , Field type: int   , Field kind: int
Copier après la connexion

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