Comprendre la différence entre Reflect.ValueOf() et Value.Elem() dans Go
La réflexion est une technique puissante dans Go qui permet vous d'inspecter et de manipuler les structures de données au moment de l'exécution. Deux fonctions clés en réflexion sont Reflect.ValueOf() et Value.Elem(). Cependant, ils peuvent prêter à confusion pour les débutants.
reflect.ValueOf()
reflect.ValueOf() est une fonction qui prend une valeur de n'importe quel type et renvoie un Reflect.Value représentant cette valeur. Le reflex.Value contient des informations sur le type, la taille et d'autres propriétés de la valeur.
Value.Elem()
Value.Elem() est une méthode sur réfléchissant.Value qui renvoie la valeur ou le pointeur contenu dans le reflet.Value actuel. Elle est couramment utilisée aux fins suivantes :
Utilisation
Ce qui suit L'exemple montre l'utilisation des deux fonctions :
func main() { var i int = 3 var p *int = &i // Get a reflect.Value from an int iv := reflect.ValueOf(i) // Get a reflect.Value from a pointer to int pv := reflect.ValueOf(p) // Retrieve the dereferenced value of the pointer pv_d := pv.Elem() fmt.Println(iv.Type(), pv.Type(), pv_d.Type()) // Output: int *int int }
Dans cet exemple, iv est un reflet.Valeur représentant directement la valeur entière 3, tandis que pv est un reflet.Valeur représentant un pointeur vers l'entier. La méthode Elem() dans ce contexte renvoie une réflexion.Value représentant la valeur déréférencée du pointeur, qui est essentiellement la même que iv.
Quand utiliser .Elem()
Utilisez Value.Elem() dans les situations suivantes :
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!