"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment obtenir des adresses de champ dans des structures imbriquées à l'aide de Reflection ?

Comment obtenir des adresses de champ dans des structures imbriquées à l'aide de Reflection ?

Publié le 2024-11-10
Parcourir:529

How to Obtain Field Addresses in Nested Structures Using Reflection?

Obtention d'adresses de champ dans des structures imbriquées à l'aide de la réflexion

Dans ce scénario, vous souhaitez parcourir et examiner des structures imbriquées et obtenir les adresses de non -champs de pointeur à l'intérieur d'eux. En utilisant la réflexion, vous disposez d'une fonction qui parcourt les champs mais rencontre des difficultés à obtenir l'adresse mémoire des champs non pointeurs situés dans des sous-structures intégrées.

Pour remédier à ce problème, il est crucial de noter que valueField.Interface() le fait ne fournit pas le résultat attendu car il renvoie la valeur réelle stockée dans le champ, ce qui n'est pas valide lorsque vous travaillez avec des types non pointeurs.

La solution réside dans la modification de la fonction InspectStructV pour recevoir un reflet.Value au lieu de une interface{}. Cela permet de manipuler directement l'objet de réflexion et de récupérer l'adresse du champ. De plus, lors de l'appel récursif d'InspectStructV pour les champs de structure, valueField, qui contenait auparavant la valeur d'interface, pointe désormais directement vers la valeur de réflexion de la structure imbriquée, garantissant que l'adresse peut être récupérée correctement.

Voici le code révisé. extrait :

func InspectStructV(val reflect.Value) {
    if val.Kind() == reflect.Interface && !val.IsNil() {
        elm := val.Elem()
        if elm.Kind() == reflect.Ptr && !elm.IsNil() && elm.Elem().Kind() == reflect.Ptr {
            val = elm
        }
    }
    if val.Kind() == reflect.Ptr {
        val = val.Elem()
    }

    for i := 0; i 

En effectuant ces modifications, vous pourrez récupérer avec succès les adresses mémoire des champs non pointeurs même lorsqu'ils résident dans des structures imbriquées.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3