Maison > développement back-end > Golang > le corps du texte

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

Linda Hamilton
Libérer: 2024-11-24 02:57:10
original
542 Les gens l'ont consulté

Why Can sync.WaitGroup Methods Be Called on Non-Pointer Values?

Ensemble de méthodes de sync.WaitGroup

Le sync.WaitGroup est une primitive de synchronisation qui vous permet d'attendre la fin d'une collection de goroutines . Bien que sa documentation suggère que les méthodes Add, Done et Wait nécessitent un récepteur de pointeur, vous pouvez également les utiliser sur des valeurs autres que des pointeurs. Comment est-ce possible ?

Le secret réside dans l'ensemble de méthodes vide de sync.WaitGroup. Cela signifie que toutes les méthodes de sync.WaitGroup sont des récepteurs de pointeurs. Lorsque vous créez une valeur de type sync.WaitGroup, telle que :

var wg sync.WaitGroup
Copier après la connexion

Vous créez en fait un pointeur vers une structure sync.WaitGroup. Ce pointeur est automatiquement déréférencé lorsque vous appelez des méthodes sur la variable wg. Par exemple, le code suivant est compilé avec succès :

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

Le compilateur Go convertit implicitement wg en un pointeur vers sync.WaitGroup avant d'appeler les méthodes. Ce comportement est défini dans la spécification du langage Go :

Si x est adressable et que l'ensemble de méthodes de &x contient m, x.m() est un raccourci pour (&x).m().

Par conséquent, vous peut appeler des méthodes qui ont des récepteurs de pointeurs sur des valeurs non-pointeurs si ces valeurs sont adressables. Les valeurs non-pointeurs sont toujours adressables dans Go.

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