Sobes.tech
Junior — Middle

Come viene effettuato il controllo dell'esecuzione e della sincronizzazione delle goroutine nel programma?

sobes.tech AI

Risposta dell'AI

In Go, il controllo dell'esecuzione e la sincronizzazione delle goroutine vengono generalmente effettuati con:

  • WaitGroup del pacchetto sync — permette di attendere la conclusione di un gruppo di goroutine.
  • Canali (channels) — vengono utilizzati per trasmettere dati e segnali tra goroutine, garantendo la sincronizzazione.

Esempio con WaitGroup:

var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    // lavoro della goroutine
}()
wg.Wait() // aspetta la fine della goroutine

I canali permettono, ad esempio, di trasmettere risultati o segnali di completamento:

ch := make(chan int)
go func() {
    ch <- 42 // invio del valore
}()
valore := <-ch // ricezione del valore, sincronizza le goroutine

Pertanto, WaitGroup e canali sono gli strumenti principali per il controllo e la sincronizzazione delle goroutine.