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