Anonyme Struktur vs. leere Struktur
Im bereitgestellten Go-Code haben wir zwei Fragen im Zusammenhang mit der Verwendung anonymer und leerer Strukturen.
[1. Frage: Anonyme Struktur]
Die line done <- struct{}{}` verwendet eine anonyme Struktur, um ein Signal an den Fertig-Kanal zu senden. Dies ist notwendig, da der fertige Kanal mit dem Typ chan struct{} deklariert ist, was bedeutet, dass er nur Werte vom Typ struct{} senden und empfangen kann.
struct{}{}` ist eine anonyme Struktur, was bedeutet, dass es keinen Namen hat. Es entspricht struct { }. Eine leere Struktur ist eine Struktur ohne Felder und hat in Go eine Größe von 0 Bytes.
[2. Frage: Verwendung leerer Strukturen]
Die Zeile für _ = range langs { <-done } wird verwendet, um Werte vom Fertig-Kanal zu empfangen und zu verwerfen. Diese Zeile ist notwendig, um sicherzustellen, dass alle Goroutinen, die auf dem Fertig-Kanal warten, entsperrt werden, sobald sie ihre Arbeit beendet haben.
Da der Fertig-Kanal ein Semaphor (d. h. ein Signalkanal) ist, sind wir daran nicht interessiert Werte, die darüber gesendet werden, jedoch nur in ihrer Anwesenheit oder Abwesenheit. Durch die Verwendung einer leeren Struktur als Werttyp des Kanals sparen wir Speicher und behalten die gewünschte Semantik des Signalmechanismus bei.
Zusammenfassend sind anonyme Strukturen anonyme Typen, die keinen Namen haben, während leere Strukturen Strukturen sind ohne Felder. Im bereitgestellten Code wird eine anonyme leere Struktur verwendet, um Signale über einen Semaphorkanal zu senden.
Das obige ist der detaillierte Inhalt vonAnonyme Struktur vs. leere Struktur in Go: Wann welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!