Junior — Middle
Come implementare una terminazione sicura di una goroutine quando il risultato atteso non viene ricevuto, utilizzando la struttura switch-case?
sobes.tech AI
Risposta dell'AI
Per terminare in modo sicuro una goroutine mentre si aspetta un risultato, si può usare la costruzione select con più casi, inclusi timeout o segnale di cancellazione. In Go, non esiste un switch-case diretto per i canali, ma select svolge una funzione simile.
Esempio con timeout:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Risultato ricevuto:", result)
case <-time.After(5 * time.Second):
fmt.Println("Timeout scaduto, terminazione della goroutine")
return
case <-done:
fmt.Println("Segnale di terminazione ricevuto")
return
}
}
Qui, la goroutine aspetta dati da someChannel. Se i dati non arrivano entro 5 secondi, scatta il timeout e la goroutine termina. È anche possibile inviare un segnale tramite il canale done per terminarla forzatamente.
Questo approccio evita che la goroutine rimanga bloccata e permette di controllarla in modo sicuro.