Sobes.tech
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.Context e 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.