Junior — Middle
È possibile che una goroutine venga interrotta o si interrompa da sola?
sobes.tech AI
Risposta dell'AI
In Go, l'esecuzione di una goroutine può terminare autonomamente in diversi casi:
- La goroutine ha terminato la sua funzione. Non appena la funzione eseguita nella goroutine termina, la goroutine si chiude.
- Panic all'interno della goroutine. Se si verifica un panic all'interno della goroutine e non viene gestito, questa terminerà in modo anomalo.
- Annullamento tramite il contesto (context). Se la goroutine ascolta un segnale di annullamento tramite
context.Contexte lo riceve, può terminare correttamente.
È importante capire che le goroutine non vengono interrotte dall'esterno in modo forzato — bisogna implementare un meccanismo di arresto autonomo, ad esempio tramite canali o contesti.
Esempio di utilizzo del contesto per annullare una goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine terminata")
return
default:
// lavoro
}
}
}(ctx)
// In qualche momento, si chiama cancel()
cancel()
In questo modo, la goroutine termina o per completamento del lavoro o per segnale di annullamento, se previsto.