Sobes.tech
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")