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.
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) { // ... }
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)
Ceci transmet l'adresse de u à la fonction, lui permettant de modifier la valeur d'origine.
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
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"}
Cela attribue une nouvelle valeur à la structure User à l'adresse stockée dans userPtr.
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.
Considérez ce qui suit code :
func main() { u := User{name: "Jane"} SendNotification(&u) // Passing by reference fmt.Println(u.name) // Prints "Jane" }
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" }
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!