Maison > développement back-end > Golang > Pourquoi puis-je appeler les méthodes sync.WaitGroup sur des valeurs, pas seulement sur des pointeurs ?

Pourquoi puis-je appeler les méthodes sync.WaitGroup sur des valeurs, pas seulement sur des pointeurs ?

Barbara Streisand
Libérer: 2024-12-16 07:44:09
original
531 Les gens l'ont consulté

Why Can I Call sync.WaitGroup Methods on Values, Not Just Pointers?

Pourquoi les méthodes sync.WaitGroup peuvent-elles être appelées sur des valeurs plutôt que sur des pointeurs ?

Malgré la documentation sync.WaitGroup indiquant que ses méthodes nécessitent un *récepteur sync.WaitGroup, il est possible d'appeler ces méthodes sur des valeurs de type sync.WaitGroup. En effet, toutes les méthodes sync.WaitGroup ont des récepteurs de pointeurs, ce qui signifie que le compilateur convertira automatiquement la valeur en pointeur lorsque la méthode est appelée.

L'ensemble de méthodes vide de sync.WaitGroup

L'ensemble de méthodes réel d'un sync.WaitGroup est vide. Pour le confirmer, vous pouvez utiliser la réflexion :

wg := sync.WaitGroup{}
fmt.Println(reflect.TypeOf(wg).NumMethod()) // Output: 0
Copier après la connexion

Par conséquent, les méthodes qui semblent être définies sur les valeurs de sync.WaitGroup font en fait partie de l'ensemble de méthodes de *sync.WaitGroup.

Notation abrégée pour appeler des méthodes de pointeur sur des valeurs

Lorsque vous appelez une méthode de pointeur sur une valeur, le le compilateur le traduit en un appel au pointeur vers cette valeur. Par exemple :

var wg sync.WaitGroup

wg.Add(1)
Copier après la connexion

Est équivalent à :

(&wg).Add(1)
Copier après la connexion

La spécification pour Go indique que si une variable est adressable et que son ensemble de méthodes contient une méthode, appeler cette méthode directement sur le variable est un raccourci pour l'appeler sur le pointeur vers cette variable.

Connexe Question

Pour plus d'informations sur ce sujet, reportez-vous à la question connexe :

  • [Appeler une méthode avec un récepteur pointeur par un objet au lieu d'un pointeur vers celui-ci ? ](https://stackoverflow.com/questions/4239271)

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