"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 > Quelle est la distinction clé entre Reflect.Type et Reflect.Value dans la réflexion Go ?

Quelle est la distinction clé entre Reflect.Type et Reflect.Value dans la réflexion Go ?

Publié le 2024-11-08
Parcourir:433

What is the key distinction between reflect.Type and reflect.Value in Go reflection?

Types et valeurs de réflexion dans Go

Les réflexions dans Go permettent aux développeurs d'inspecter et de manipuler les types et les valeurs au moment de l'exécution. Comprendre leurs distinctions est crucial pour une utilisation efficace de la réflexion.

Type vs. Valeur dans la réflexion

En réflexion, reflex.TypeOf(i) renvoie un objet réflexion.Type , tandis que Reflect.ValueOf(i) renvoie un objet Reflect.Value.

reflect.Type

  • Fournit des informations sur le type, telles que son nom, package et type sous-jacent.
  • Autorise les requêtes sur ses méthodes, champs et autres données liées au type.
  • Ne contient pas la valeur réelle de la variable qui lui est transmise.

reflect.Value

  • Représente la valeur réelle de la variable qui lui est transmise.
  • Permet de lire et de définir des valeurs, en manipulant les données sous-jacentes , et interroger ses méthodes et ses champs.
  • Contient une méthode Type() qui renvoie son reflet.Type.

Exemple

In l'extrait de code :

func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i)  // Get the type of *Person
        v := reflect.ValueOf(i)  // Get the value of i
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}
  • t est un objet réflexion.Type représentant le type de la variable pointée par i.
  • v est un objet réflexion.Value représentant la valeur réelle de la variable pointée par i. by i.
  • tag est la balise du premier champ (nom) de la structure Person obtenue via le reflet.Type.
  • name est la représentation sous forme de chaîne du premier champ obtenu via le reflet .Value.

En comprenant la différence entre les types et les valeurs dans la réflexion, les développeurs peuvent exploiter la puissance de la réflexion dans divers scénarios, notamment l'introspection, l'invocation de méthodes dynamiques et la sérialisation des donné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