Sobes.tech
Junior — Middle

Come garantire che tutte le goroutine in esecuzione in un programma vengano completate?

sobes.tech AI

Risposta dell'AI

In Go non esiste un modo integrato per terminare forzatamente una goroutine dall'esterno. Per garantire che tutte le goroutine in esecuzione terminino, si utilizza generalmente la sincronizzazione con sync.WaitGroup.

Principio di funzionamento:

  • Prima di avviare ogni goroutine, si chiama wg.Add(1).
  • Alla fine della goroutine, si chiama wg.Done().
  • Nella funzione principale, si chiama wg.Wait(), che blocca l'esecuzione fino a quando il contatore non diventa zero.

Esempio:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // lavoro della goroutine
}()

wg.Wait() // attendere la terminazione di tutte le goroutine

In questo modo, il programma garantisce di attendere la terminazione di tutte le goroutine prima di continuare o terminare.