Sobes.tech
Senior

Perché abbiamo bisogno di WaitGroup in questo compito?

sobes.tech AI

Risposta dell'AI

WaitGroup in Go viene utilizzato per sincronizzare le goroutine. In compiti in cui vengono avviate più goroutine, WaitGroup permette al thread principale di attendere la fine di tutte le goroutine avviate prima di continuare l'esecuzione. Questo previene che il programma termini prematuramente o passi alla fase successiva quando le operazioni in background non sono ancora terminate.

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
        // lavoro della goroutine
        fmt.Println("Goroutine", id, "completata")
    }(i)
}

wg.Wait() // aspettiamo che tutte le goroutine finiscano
fmt.Println("Tutte le goroutine sono terminate")

In questo modo, WaitGroup garantisce una corretta coordinazione e previene condizioni di race o terminazioni premature del programma.