Dans le domaine de la programmation Go, les fonctions réflexion.ValueOf() et la méthode Value.Elem() joue des rôles distincts dans l’exploration des subtilités de la réflexion. Examinons leurs différences et leurs applications.
reflect.ValueOf() sert de passerelle vers le monde réflexif de Go. Il prend une valeur ordinaire, telle qu'un entier ou une chaîne, et renvoie un descripteur de valeur qui représente cette valeur. Ce descripteur fournit un moyen d'inspecter et de manipuler la valeur sous-jacente de manière structurée.
Value.Elem() est une méthode exclusivement disponible pour refléter. Instances de valeur. Il récupère la valeur intégrée dans une interface ou la valeur pointée par un pointeur. En supprimant la couche intermédiaire, cela donne accès à la valeur concrète sous-jacente.
Considérez l'extrait de code suivant :
var i int = 3 var p *int = &i
Si nous appliquons la réflexion. ValueOf() vers ce pointeur :
v := reflect.ValueOf(p)
Nous récupérons un descripteur Reflect.Value qui représente le pointeur lui-même (v). Pour accéder à la valeur vers laquelle le pointeur pointe (3), nous appelons v.Elem():
v2 := v.Elem()
Enfin, pour reconvertir cette réflexion.Value en une valeur normale, nous utilisons Interface() :
value := v2.Interface().(int) // Type assertion required
Au-delà de démasquer les valeurs derrière les pointeurs et les interfaces, Value.Elem() a un cas d'utilisation supplémentaire, moins courant. Lorsqu'un pointeur vers une interface est transmis, il récupère la valeur de l'interface placée sous le pointeur d'interface. Les appels ultérieurs à Value.Elem() dévoileront la valeur concrète stockée dans cette interface.
En règle générale :
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!