Heim >Backend-Entwicklung >Golang >Warum kann ich sync.WaitGroup-Methoden für Werte aufrufen, nicht nur für Zeiger?

Warum kann ich sync.WaitGroup-Methoden für Werte aufrufen, nicht nur für Zeiger?

Barbara Streisand
Barbara StreisandOriginal
2024-12-16 07:44:09530Durchsuche

Why Can I Call sync.WaitGroup Methods on Values, Not Just Pointers?

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:

  • [Aufrufen einer Methode mit einem Zeigerempfänger durch ein Objekt anstelle eines Zeigers darauf?](https://stackoverflow.com/questions /4239271)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn