Sobes.tech
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.