Maison > développement back-end > Golang > le corps du texte

Quelle est la différence entre `reflect.TypeOf()` et `reflect.ValueOf()` dans Go ?

Linda Hamilton
Libérer: 2024-10-31 20:52:02
original
346 Les gens l'ont consulté

 What's the Difference Between `reflect.TypeOf()` and `reflect.ValueOf()` in Go?

Type et valeur de réflexion dans Go

Le package Reflection dans Go offre la possibilité d'inspecter et de modifier les valeurs de différents types au moment de l'exécution. Cela permet aux développeurs de créer un code générique puissant capable d'opérer sur des données de types arbitraires.

Un aspect de la réflexion est la différence entre le type et la valeur. Reflect.TypeOf() renvoie un objet Reflect.Type, qui représente le type d'une variable. Reflect.ValueOf() renvoie un objet Reflect.Value, qui représente une valeur spécifique de ce type.

Exemple

Considérez l'extrait de code suivant :

<code class="go">func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i) //what t contains?   
        v := reflect.ValueOf(i) //what v contains?
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}</code>
Copier après la connexion

Dans dans ce cas, t fait référence au type de i, qui est *Person. v contient la valeur réelle de i, qui est une *Personne avec un champ de chaîne "nom".

Différence entre le type et la valeur

reflect.Type vous permet d'interroger des informations liées à toutes les variables du même type. Par exemple, vous pouvez obtenir le nom du type, ses champs et ses méthodes. Reflect.Value, quant à lui, vous permet d'interroger des informations et d'effectuer des opérations sur des données d'un type arbitraire. Cela inclut l'obtention et la définition de champs individuels, la conversion de valeurs entre types et l'appel de méthodes.

Dans l'exemple ci-dessus, la variable tag contient les métadonnées associées au premier champ du type Personne, tandis que la variable nom contient le valeur réelle du premier champ de la structure *Person.

Conclusion

En comprenant la différence entre le type et la valeur en réflexion, vous pouvez développer un code plus flexible et plus puissant. Ces concepts sont essentiels pour créer des applications génériques, effectuer une introspection d'exécution et écrire des cadres de métaprogrammation.

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