Junior — Middle
Kako implementirati sigurno završavanje gorutine kada se ne dobije očekivani rezultat, koristeći konstrukciju switch-case?
sobes.tech АИ
Одговор од АИ
Za siguran završetak gorutine dok čeka rezultat, možete koristiti konstrukciju select sa više slučajeva, uključujući timeout ili signal za otkazivanje. U Go-u ne postoji direktan switch-case za kanale, ali select obavlja sličnu funkciju.
Primer sa timeout-om:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Primljen rezultat:", result)
case <-time.After(5 * time.Second):
fmt.Println("Vreme isteklo, završavam gorutinu")
return
case <-done:
fmt.Println("Primljen signal za završetak")
return
}
}
Ovde, gorutina čeka podatke iz someChannel. Ako podaci ne stignu za 5 sekundi, aktivira se timeout i gorutina se završava. Takođe, može se poslati signal putem kanala done za prinudno završavanje.
Ovaj pristup sprečava da gorutina ostane blokirana i omogućava joj sigurnu kontrolu.