Maison  >  Article  >  développement back-end  >  Pourquoi sync.WaitGroup a-t-il un ensemble de méthodes vide, alors que ses méthodes semblent appelables sur des valeurs non-pointeurs ?

Pourquoi sync.WaitGroup a-t-il un ensemble de méthodes vide, alors que ses méthodes semblent appelables sur des valeurs non-pointeurs ?

DDD
DDDoriginal
2024-11-23 14:25:14766parcourir

Why Does sync.WaitGroup Have an Empty Method Set, Yet Its Methods Appear Callable on Non-Pointer Values?

Ensemble de méthodes de sync.WaitGroup

Lorsque vous travaillez avec sync.WaitGroup de Golang, on peut se poser la question de son ensemble de méthodes.

Le Solution

  • Ensemble de méthodes vide :
    L'ensemble de méthodes de sync.WaitGroup est techniquement vide. Cela signifie que ses méthodes ne peuvent pas être directement invoquées sur des valeurs autres que des pointeurs.
  • Récepteurs de pointeurs :
    Toutes les méthodes de sync.WaitGroup ont des récepteurs de pointeurs, ce qui les rend effectivement partie intégrante de la méthode. ensemble du type de pointeur, *sync.WaitGroup.

Le Raison

  • Déréférencement automatique :
    Malgré l'exigence du récepteur de pointeur, les appels aux méthodes sync.WaitGroup sur des valeurs non pointeurs sont possibles en raison du déréférencement automatique.
  • Notation abrégée :
    Dans un tel Dans certains cas, le compilateur prend implicitement l’adresse de la valeur non-pointeur et l’utilise comme récepteur de méthode. Cela traduit efficacement wg.Add(1) en (&wg).Add(1).

Exemple

Dans l'extrait de code fourni, wg est déclaré comme valeur de type sync.WaitGroup. Les appels de méthode suivants (wg.Add, wg.Done, etc.) sont autorisés car le compilateur déréférence automatiquement wg et le traite comme un pointeur.

Question connexe

Référez-vous à la question suivante pour mieux comprendre :

  • Appel d'une méthode avec un récepteur pointeur par un objet au lieu d'un pointeur vers lui ?

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