Junior — Middle
Puoi spiegare come funziona il meccanismo di attesa del completamento di più goroutine in Go con WaitGroup?
sobes.tech AI
Risposta dell'AI
In Go, per aspettare il completamento di più goroutine si utilizza il tipo sync.WaitGroup. Permette di "sottoscriversi" a più goroutine e bloccare l'esecuzione fino a quando tutte non terminano.
Metodi principali di WaitGroup:
- Add(n int) — aumenta il contatore di n, solitamente chiamato prima di avviare le goroutine.
- Done() — diminuisce il contatore di 1, chiamato alla fine di ogni goroutine.
- Wait() — blocca l'esecuzione fino a quando il contatore non diventa 0.
Esempio di utilizzo:
var wg sync.WaitGroup
wg.Add(3) // aspettiamo 3 goroutine
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // segnaliamo il completamento
fmt.Printf("Goroutine %d in esecuzione\n", id)
// qualche lavoro
}(i)
}
wg.Wait() // aspettiamo che tutte le goroutine finiscano
fmt.Println("Tutte le goroutine sono terminate")