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
Barbara Streisandoriginal
2024-12-16 07:44:09525parcourir

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

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)

Est équivalent à :

(&wg).Add(1)

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!

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