Maison > développement back-end > Golang > Go Reflection : Quand devriez-vous utiliser `Value.Elem()` ?

Go Reflection : Quand devriez-vous utiliser `Value.Elem()` ?

Linda Hamilton
Libérer: 2024-12-13 08:09:10
original
571 Les gens l'ont consulté

Go Reflection: When Should You Use `Value.Elem()`?

Comprendre la différence entre Reflect.ValueOf() et Value.Elem() dans Go

La réflexion est une technique puissante dans Go qui permet vous d'inspecter et de manipuler les structures de données au moment de l'exécution. Deux fonctions clés en réflexion sont Reflect.ValueOf() et Value.Elem(). Cependant, ils peuvent prêter à confusion pour les débutants.

reflect.ValueOf()

reflect.ValueOf() est une fonction qui prend une valeur de n'importe quel type et renvoie un Reflect.Value représentant cette valeur. Le reflex.Value contient des informations sur le type, la taille et d'autres propriétés de la valeur.

Value.Elem()

Value.Elem() est une méthode sur réfléchissant.Value qui renvoie la valeur ou le pointeur contenu dans le reflet.Value actuel. Elle est couramment utilisée aux fins suivantes :

  • Récupération de la valeur pointée par un pointeur : La méthode Elem() renverra la valeur déréférencée d'un pointeur si le Kind( ) de la réflexion.La valeur est Ptr.
  • Obtention de la valeur sous-jacente d'une interface : Si le Kind() du réfléchissant.Value est Interface, Elem() renverra la valeur concrète stockée dans l'interface.
  • Navigation dans les structures de données : Par exemple, si vous avez un reflet.Value représentant une structure, vous pouvez appliquer Elem() pour récupérer ses champs.

Utilisation

Ce qui suit L'exemple montre l'utilisation des deux fonctions :

func main() {
    var i int = 3
    var p *int = &i
    
    // Get a reflect.Value from an int
    iv := reflect.ValueOf(i)

    // Get a reflect.Value from a pointer to int
    pv := reflect.ValueOf(p)

    // Retrieve the dereferenced value of the pointer
    pv_d := pv.Elem()
    
    fmt.Println(iv.Type(), pv.Type(), pv_d.Type()) // Output: int *int int
}
Copier après la connexion

Dans cet exemple, iv est un reflet.Valeur représentant directement la valeur entière 3, tandis que pv est un reflet.Valeur représentant un pointeur vers l'entier. La méthode Elem() dans ce contexte renvoie une réflexion.Value représentant la valeur déréférencée du pointeur, qui est essentiellement la même que iv.

Quand utiliser .Elem()

Utilisez Value.Elem() dans les situations suivantes :

  • Récupération de la valeur déréférencée d'un pointeur.
  • Obtenir la valeur sous-jacente d'une interface.
  • Naviguer dans des structures de données complexes.

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