Sobes.tech
Junior — Middle

Jak implementovat bezpečné ukončení gorutiny, když není obdržen očekávaný výsledek, pomocí konstrukce switch-case?

sobes.tech AI

Odpověď od AI

Pro bezpečné ukončení gorutiny při čekání na výsledek můžete použít konstrukci select s více případy, včetně časového limitu nebo signálu zrušení. V Go neexistuje přímý switch-case pro kanály, ale select plní podobnou funkci.

Příklad s časovým limitem:

func worker(done chan struct{}) {
    select {
    case result := <-someChannel:
        fmt.Println("Obdržený výsledek:", result)
    case <-time.After(5 * time.Second):
        fmt.Println("Vypršel časový limit, ukončuji gorutinu")
        return
    case <-done:
        fmt.Println("Obdržen signál ukončení")
        return
    }
}

Zde gorutina čeká na data z someChannel. Pokud data nepřijdou do 5 sekund, spustí se časový limit a gorutina se ukončí. Také je možné poslat signál přes kanál done pro nucené ukončení.

Tento přístup zabraňuje zablokování gorutiny a umožňuje ji bezpečně řídit.