Junior — Middle
Come si può interrompere correttamente l'esecuzione delle goroutine utilizzando il contesto in Go?
sobes.tech AI
Risposta dell'AI
Per fermare correttamente le goroutine in Go, si utilizza spesso il pacchetto context. Si crea un contesto con possibilità di cancellazione (context.WithCancel), che viene passato alla goroutine. All'interno della goroutine, lo stato del contesto viene verificato periodicamente tramite <-ctx.Done(). Quando si chiama la funzione di cancellazione, il canale Done() si chiude, e la goroutine può terminare correttamente.
Esempio:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine fermata")
return
default:
// eseguire il lavoro
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// dopo un po' di tempo, fermare la goroutine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // per permettere alla goroutine di terminare
}
Questo approccio consente di terminare le goroutine in modo sicuro e controllato senza utilizzare metodi non sicuri.