Maison > développement back-end > Golang > Pointeurs Go : quelle est la différence entre `&` et `*` et comment sont-ils utilisés ?

Pointeurs Go : quelle est la différence entre `&` et `*` et comment sont-ils utilisés ?

Mary-Kate Olsen
Libérer: 2024-11-30 18:40:11
original
489 Les gens l'ont consulté

Go Pointers: What's the Difference Between `&` and `*` and How Are They Used?

& et * Pointeurs : différences et utilisation

Dans Go, les arguments de fonction peuvent être passés soit par valeur, soit par référence. Lors du passage par valeur, une copie de la variable est créée et transmise à la fonction. Lors du passage par référence, l'adresse de la variable est passée à la place, permettant à la fonction de modifier la valeur d'origine.

Ce concept de passage par référence est réalisé à l'aide de pointeurs. Un pointeur est une variable qui contient l'adresse d'une autre variable. L'opérateur & renvoie l'adresse d'une variable, tandis que l'opérateur * est utilisé pour accéder à la valeur stockée à une adresse.

Utilisation de &

L'opérateur & est utilisé pour transmettre des variables par référence comme arguments de fonction. Par exemple, considérons la fonction suivante :

func SendNotification(user *User) {
    // ...
}
Copier après la connexion

Cette fonction attend un *Utilisateur comme argument, où * indique que l'argument est un pointeur vers une structure Utilisateur. Pour passer une variable u de type User, il faut utiliser l'opérateur & comme ceci :

SendNotification(&u)
Copier après la connexion

Ceci transmet l'adresse de u à la fonction, lui permettant de modifier la valeur d'origine.

Utilisation de *

L'opérateur * est utilisé pour accéder à la valeur stockée à une adresse. Par exemple, étant donné le code suivant :

var userPtr *User
userPtr = &u
Copier après la connexion

userPtr est un pointeur qui contient l'adresse de la structure User stockée dans u. Pour accéder à la valeur stockée à cette adresse, nous pouvons utiliser l'opérateur * :

*userPtr = User{name: "John"}
Copier après la connexion

Cela attribue une nouvelle valeur à la structure User à l'adresse stockée dans userPtr.

Distinction et utilisation

La distinction entre & et * réside dans leur fonctionnalité. & est utilisé pour obtenir l'adresse d'une variable, permettant de la passer par référence. * est utilisé pour accéder à la valeur stockée à une adresse, permettant de modifier la valeur d'origine.

En pratique, & est couramment utilisé pour transmettre des variables par référence à des fonctions, tandis que * est utilisé pour modifier la valeur stockée à une adresse, par exemple lors de l'utilisation de pointeurs comme récepteurs dans les méthodes.

Exemple d'utilisation

Considérez ce qui suit code :

func main() {
    u := User{name: "Jane"}

    SendNotification(&u) // Passing by reference

    fmt.Println(u.name) // Prints "Jane"
}
Copier après la connexion

Ici, la fonction SendNotification prend un *User comme argument. En passant &u, nous permettons à la fonction de modifier la valeur originale de u. À l'intérieur de la fonction, la valeur pourrait être modifiée comme ceci :

func SendNotification(user *User) {
    user.name = "John"
}
Copier après la connexion

Cela changerait le nom de la structure User qui a été passée par référence.

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