Junior — Middle
Come si può interrompere correttamente una goroutine in esecuzione, se è necessario che termini in base a un segnale esterno o una condizione, anche se il risultato non è ancora stato ottenuto?
sobes.tech AI
Risposta dell'AI
Per interrompere correttamente una goroutine in esecuzione tramite un segnale esterno o una condizione in Go, si utilizzano generalmente il contesto (context.Context) o i canali per trasmettere il segnale di cancellazione.
Esempio con utilizzo del contesto:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Segnale di cancellazione ricevuto, terminare la goroutine
return
default:
// Eseguire il lavoro
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// In qualche momento, si chiama cancel() per fermare la goroutine
cancel()
}
Questo approccio permette alla goroutine di verificare regolarmente se è stato inviato un segnale di stop e di terminare correttamente, anche se il risultato non è ancora stato ottenuto. In modo analogo, si può usare un canale per trasmettere il segnale di stop, ma context è un metodo più idiomatico e comodo in Go.