Middle+
Parla più dettagliatamente di WaitGroup: come funziona, cosa fanno Add, Done, Wait?
sobes.tech AI
Risposta dell'AI
WaitGroup in Go viene utilizzato per attendere il completamento di un gruppo di goroutine.
- Add(n int) — aumenta il contatore di n, solitamente chiamato prima di avviare le goroutine.
- Done() — diminuisce il contatore di 1, chiamato all'interno della goroutine dopo aver completato il lavoro.
- Wait() — blocca l'esecuzione fino a quando il contatore non diventa zero, cioè fino a quando tutte le goroutine chiamano Done.
Esempio:
var wg sync.WaitGroup
wg.Add(3) // aspetta 3 goroutine
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "completata")
}(i)
}
wg.Wait() // aspetta che tutte le goroutine finiscano
fmt.Println("Tutte le goroutine sono terminate")
In questo modo, WaitGroup aiuta a sincronizzare compiti paralleli e ad aspettare che siano completati.