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
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()
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!