Maison >développement back-end >Golang >Go Pointeurs : quand utiliser `&` et `*` ?

Go Pointeurs : quand utiliser `&` et `*` ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 08:55:11174parcourir

Go Pointers: When to Use `&` and `*`?

Comprendre les pointeurs (& et *)

Go nécessite souvent de transmettre des variables comme arguments aux fonctions. Cependant, cela peut prêter à confusion lorsque l’on rencontre des erreurs lors de telles opérations. Cet article clarifie la différence entre les pointeurs & et *, en expliquant quand chacun doit être utilisé.

Pointeurs et adresses

Les pointeurs sont des variables qui stockent l'adresse d'une autre variable dans mémoire. L'opérateur & récupère l'adresse d'une variable. Par exemple, si « u » est une structure utilisateur, « &u » renvoie l'adresse de « u ».

Décoder JSON avec &

Pour comprendre l'opérateur & , considérons le code suivant :

var u User

if err := decoder.Decode(&u); err != nil {
    // Code to handle error...
}

La fonction json.Decode attend un pointeur dans lequel décoder les données JSON. Dans cet exemple, « u » est uniquement une structure utilisateur, pas un pointeur. En utilisant '&u', nous fournissons à la fonction l'adresse de 'u', permettant au décodage de réussir.

Pointeurs et redirection

L'opérateur peut être considéré comme une « redirection » vers la valeur stockée à l’adresse d’un pointeur. Par exemple, si le pointeur 'x' stocke l'adresse de 'y', 'x' nous donne la valeur de 'y'.

Considérez le code suivant :

x := new(User) // Creates a pointer to a User struct
*x = y        // Assigns the value of 'y' to the struct pointed to by 'x'
fmt.Println(*x) // Prints the value of 'y'

Résumé d'utilisation

  • Utiliser & pour obtenir l'adresse d'une variable ou pour passer un pointeur vers une fonction qui en nécessite un.
  • Utilisez * pour accéder à la valeur stockée à l'adresse d'un pointeur.
  • Évitez d'utiliser * sur des non-pointeurs, car cela entraînerait une erreur .

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