Junior — Middle
Können Sie erklären, wie der Mechanismus zum Warten auf das Ende mehrerer Goroutines in Go mit WaitGroup funktioniert?
sobes.tech KI
Antwort von AI
In Go wird der Typ sync.WaitGroup verwendet, um auf das Beenden mehrerer Goroutines zu warten. Er ermöglicht es, sich auf mehrere Goroutines "abzuschließen" und die Ausführung zu blockieren, bis alle beendet sind.
Wichtige Methoden des WaitGroup:
- Add(n int) — erhöht den Zähler um n, wird in der Regel vor dem Starten der Goroutines aufgerufen.
- Done() — verringert den Zähler um 1, wird am Ende jeder Goroutine aufgerufen.
- Wait() — blockiert die Ausführung, bis der Zähler 0 erreicht.
Beispiel zur Verwendung:
var wg sync.WaitGroup
wg.Add(3) // warten auf 3 Goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // Signal, dass beendet ist
fmt.Printf("Goroutine %d läuft\n", id)
// irgendeine Arbeit
}(i)
}
wg.Wait() // warten, bis alle Goroutines beendet sind
fmt.Println("Alle Goroutines sind beendet")