Warum können sync.WaitGroup-Methoden für Werte anstelle von Zeigern aufgerufen werden?
Obwohl in der sync.WaitGroup-Dokumentation angegeben ist, dass ihre Methoden eine erfordern *sync.WaitGroup-Empfänger, es ist möglich, diese Methoden für Werte vom Typ sync.WaitGroup aufzurufen. Dies liegt daran, dass alle sync.WaitGroup-Methoden Zeigerempfänger haben, was bedeutet, dass der Compiler den Wert automatisch in einen Zeiger umwandelt, wenn die Methode aufgerufen wird.
Der leere Methodensatz von sync.WaitGroup
Der eigentliche Methodensatz einer sync.WaitGroup ist leer. Um dies zu bestätigen, können Sie Reflection verwenden:
wg := sync.WaitGroup{} fmt.Println(reflect.TypeOf(wg).NumMethod()) // Output: 0
Daher sind die Methoden, die auf sync.WaitGroup-Werten definiert zu sein scheinen, tatsächlich Teil des Methodensatzes von *sync.WaitGroup.
Kurzschreibweise zum Aufrufen von Zeigermethoden auf Werte
Wenn Sie eine Zeigermethode auf einen Wert aufrufen, wird die Der Compiler übersetzt es in einen Aufruf des Zeigers auf diesen Wert. Zum Beispiel:
var wg sync.WaitGroup wg.Add(1)
Entspricht:
(&wg).Add(1)
Die Spezifikation für Go besagt, dass, wenn eine Variable adressierbar ist und ihr Methodensatz eine Methode enthält, diese Methode direkt auf aufgerufen wird Variable ist eine Abkürzung für den Aufruf auf dem Zeiger auf diese Variable.
Verwandte Frage
Für Weitere Informationen zu diesem Thema finden Sie in der entsprechenden Frage:
Das obige ist der detaillierte Inhalt vonWarum kann ich sync.WaitGroup-Methoden für Werte aufrufen, nicht nur für Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!