Junior
Wat is een WaitGroup in Go en waar wordt het voor gebruikt?
sobes.tech AI
Antwoord van AI
WaitGroup is een synchronisatie-mechanisme in Go waarmee je kunt wachten tot een groep goroutines is voltooid.
Het wordt gebruikt voor:
- Wachten tot alle goroutines klaar zijn voordat je de functie of het programma verlaat.
- Coördinatie van werk tussen meerdere goroutines.
Voorbeeld van gebruik:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Verlaagt de teller na afloop van de goroutine
fmt.Printf("Werker %d is begonnen\n", id)
time.Sleep(time.Second) // Simulatie van werk
fmt.Printf("Werker %d is klaar\n", id)
}
func main() {
var wg sync.WaitGroup // Declareer een WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Verhoog de teller voordat je elke goroutine start
go worker(i, &wg)
}
wg.Wait() // Blokkeert de uitvoering van main totdat de teller 0 is
fmt.Println("Alle werkers zijn klaar")
}
Belangrijkste methoden:
Add(delta int): Verhoogt de interne teller van deWaitGroupmetdelta. Moet worden aangeroepen voordat elke te volgen goroutine wordt gestart.Done(): Verlaagt de interne teller van deWaitGroupmet 1. Wordt meestal aangeroepen metdeferbinnen de goroutine om de vermindering te garanderen, zelfs bij een panic.Wait(): Blokkeert de huidige goroutine totdat de interne teller van deWaitGroup0 wordt.