Junior
Was ist WaitGroup in Go und wofür wird es verwendet?
sobes.tech KI
Antwort von AI
WaitGroup ist ein Synchronisationsmechanismus in Go, der es ermöglicht, auf das Ende einer Gruppe von Goroutines zu warten.
Es wird verwendet für:
- Warten, bis alle Goroutines beendet sind, bevor die Funktion oder das Programm beendet wird.
- Koordination der Arbeit zwischen mehreren Goroutines.
Beispiel für die Verwendung:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Verringert den Zähler bei Beendigung der Goroutine
fmt.Printf("Arbeiter %d hat begonnen\n", id)
time.Sleep(time.Second) // Arbeitssimulation
fmt.Printf("Arbeiter %d hat beendet\n", id)
}
func main() {
var wg sync.WaitGroup // Deklariert ein WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Erhöht den Zähler vor dem Start jeder Goroutine
go worker(i, &wg)
}
wg.Wait() // Blockiert die Ausführung von main, bis der Zähler 0 ist
fmt.Println("Alle Arbeiter haben beendet")
}
Hauptmethoden:
Add(delta int): Erhöht den internen Zähler desWaitGroupumdelta. Muss vor dem Start jeder Goroutine aufgerufen werden, die verfolgt werden soll.Done(): Verringert den internen Zähler desWaitGroupum 1. Wird üblicherweise indeferinnerhalb der Goroutine aufgerufen, um die Reduktion auch im Falle eines Paniks zu garantieren.Wait(): Blockiert die aktuelle Goroutine, bis der interne Zähler desWaitGroup0 ist.