Maison  >  Article  >  développement back-end  >  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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 01:56:30200parcourir

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. Value in Reflection

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, de manipuler les données sous-jacentes , et interroger ses méthodes et ses champs.
  • Contient une méthode Type() qui renvoie son reflet.Type.

Exemple

Dans l'extrait de code :

<code class="go">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() 
    }
}</code>
  • 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 le type de variable pointée par i.
  • v est un objet réflexion.Value représentant le type de variable pointée par i. valeur de la variable pointée par 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 grâce à Reflect.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. .

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!

Déclaration:
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