Maison >développement back-end >Golang >## Pourquoi puis-je appeler une méthode de réception de pointeur sur une valeur en Go ?
Méthodes de récepteur Go appelant une confusion syntaxique
Le langage de programmation Go fournit deux types de méthodes de récepteur : les récepteurs de valeur et les récepteurs de pointeur. Les récepteurs de valeur opèrent directement sur une valeur d'un type, tandis que les récepteurs de pointeur fonctionnent sur un pointeur vers une valeur d'un type.
La documentation de Go indique que les méthodes de valeur peuvent être invoquées à la fois sur des pointeurs et des valeurs, mais le pointeur les méthodes ne peuvent être invoquées que sur des pointeurs. En effet, les méthodes de pointeur peuvent modifier le récepteur, et les invoquer sur une copie de la valeur annulerait ces modifications.
Cependant, l'exemple de code fourni appelle avec succès une méthode de pointeur sur une valeur. Pour comprendre pourquoi cela est valide, nous devons nous référer à la spécification du langage :
A method call x.m() is valid if the method set of (the type of) x contains m and the argument list can be assigned to the parameter list of m. If x is addressable and &x's method set contains m, x.m() is shorthand for (&x).m().
Cela signifie que si une variable est adressable (c'est-à-dire qu'elle peut être passée par référence), nous pouvons invoquer des méthodes de pointeur sur c'est comme s'il s'agissait d'un pointeur. Dans l'exemple de code, la variable vAge est déclarée comme valeur, mais elle est adressable car il s'agit d'une variable de type nommé. Par conséquent, l'appel vAge.Set(10) est équivalent à (&vAge).Set(10), ce qui est valide car &vAge est un pointeur vers vAge.
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!