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.
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>
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".
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.
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!