Junior
Wofür wird WaitGroup in Go verwendet?
sobes.tech KI
Antwort von AI
WaitGroup wird verwendet, um die Arbeit einer oder mehrerer Goroutines zu synchronisieren. Es ermöglicht der Hauptgoroutine, auf den Abschluss anderer erstellter Goroutines zu warten. Es besteht aus einem Zähler, der beim Erstellen einer Goroutine erhöht und beim Beenden verringert wird.
Hauptmethoden:
Add(delta int): Erhöht oder verringert den Zähler der Goroutines.Done(): Verringert den Zähler um 1. Wird in der Regel am Ende einer Goroutine aufgerufen (oft mitdefer).Wait(): Blockiert die Ausführung, bis der Zähler null ist.
Anwendungsbeispiel:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Verringert den Zähler bei Abschluss der Goroutine
fmt.Printf("Goroutine %d beginnt\n", id)
// Arbeit simulieren
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d beendet\n", id)
}
func main() {
var wg sync.WaitGroup // Erstellen eines WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Zähler für jede Goroutine erhöhen
go worker(i, &wg) // Goroutine starten, Zeiger auf WaitGroup übergeben
}
wg.Wait() // Warten, bis der Zähler 0 ist (alle Goroutines beendet)
fmt.Println("Alle Goroutines beendet")
}