Heim > Artikel > Backend-Entwicklung > Warum können sync.WaitGroup-Methoden für Nicht-Zeigerwerte aufgerufen werden?
Methodensatz von sync.WaitGroup
Die sync.WaitGroup ist ein Synchronisierungsprimitiv, mit dem Sie warten können, bis eine Sammlung von Goroutinen abgeschlossen ist . Während in der Dokumentation darauf hingewiesen wird, dass die Methoden „Add“, „Done“ und „Wait“ einen Zeigerempfänger erfordern, können Sie sie auch für Nicht-Zeigerwerte verwenden. Wie ist das möglich?
Das Geheimnis liegt im leeren Methodensatz von sync.WaitGroup. Dies bedeutet, dass alle Methoden von sync.WaitGroup Zeigerempfänger sind. Wenn Sie einen Wert vom Typ sync.WaitGroup erstellen, wie zum Beispiel:
var wg sync.WaitGroup
Sie erstellen tatsächlich einen Zeiger auf eine sync.WaitGroup-Struktur. Dieser Zeiger wird automatisch dereferenziert, wenn Sie Methoden für die wg-Variable aufrufen. Beispielsweise wird der folgende Code erfolgreich kompiliert:
wg.Add(1) wg.Done() wg.Wait()
Der Go-Compiler konvertiert wg implizit in einen Zeiger auf sync.WaitGroup, bevor er die Methoden aufruft. Dieses Verhalten ist in der Go-Sprachspezifikation definiert:
Wenn x adressierbar ist und der Methodensatz von &x m enthält, ist x.m() die Abkürzung für (&x).m().
Daher haben Sie kann Methoden aufrufen, die Zeigerempfänger für Nicht-Zeigerwerte haben, wenn diese Werte adressierbar sind. Nicht-Zeigerwerte sind in Go immer adressierbar.
Das obige ist der detaillierte Inhalt vonWarum können sync.WaitGroup-Methoden für Nicht-Zeigerwerte aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!