capypad
0 Tage Serie
go / intermediate
Snippet

Tasks synchronisieren mit sync.WaitGroup

Eine WaitGroup wartet auf den Abschluss einer Gruppe von Goroutinen. Die Haupt-Goroutine ruft 'Add' auf, um die Anzahl der Tasks festzulegen, jeder Worker ruft 'Done' auf und 'Wait' blockiert, bis alle fertig sind.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
func processAll() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
fmt.Printf("Worker %d started\n", id)
time.Sleep(time.Second)
}(i)
}
wg.Wait()
fmt.Println("All workers finished")
}
Erklärung
1
wg.Add(1)
Erhöht den WaitGroup-Zähler für jede neue Goroutine.
2
defer wg.Done()
Verringert den Zähler, wenn die Goroutine ihre Ausführung beendet.
3
wg.Wait()
Blockiert die Ausführung, bis der Zähler den Wert Null erreicht.