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.