Maison >développement back-end >Golang >## Pourquoi puis-je appeler une méthode de réception de pointeur sur une valeur en Go ?

## Pourquoi puis-je appeler une méthode de réception de pointeur sur une valeur en Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-25 18:39:17661parcourir

## Why Can I Call a Pointer Receiver Method on a Value in 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!

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