Sobes.tech
Junior — Middle

Quali funzioni fornisce la struttura WaitGroup nel linguaggio Go per la sincronizzazione delle goroutine?

sobes.tech AI

Risposta dell'AI

Nel linguaggio Go, la struttura sync.WaitGroup viene utilizzata per sincronizzare più goroutine, consentendo alla goroutine principale di attendere che le altre terminino.

Metodi principali di WaitGroup:

  • Add(delta int) — aumenta o diminuisce il contatore delle goroutine attese. Viene generalmente chiamato prima di avviare le goroutine.

  • Done() — diminuisce il contatore di 1, chiamato alla fine del lavoro della goroutine.

  • Wait() — blocca l'esecuzione finché il contatore non diventa zero.

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.Println("Goroutine", id)
    }(i)
}

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

In questo modo, WaitGroup aiuta a coordinare l'esecuzione parallela e garantisce che il programma non termini prima del previsto.