Junior — Middle
Ako implementovať bezpečné ukončenie gorutiny, keď sa neobdrží očakávaný výsledok, pomocou konštrukcie switch-case?
sobes.tech AI
Odpoveď od AI
Pre bezpečné ukončenie gorutiny počas čakania na výsledok môžete použiť konštrukciu select s viacerými prípadmi, vrátane timeoutu alebo signálu na zrušenie. V Go neexistuje priame switch-case pre kanály, ale select plní podobnú funkciu.
Príklad s timeoutom:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Prijatý výsledok:", result)
case <-time.After(5 * time.Second):
fmt.Println("Vypršal časový limit, ukončujem gorutinu")
return
case <-done:
fmt.Println("Prijatý signál na ukončenie")
return
}
}
Tu gorutina čaká na dáta z someChannel. Ak dáta neprídu do 5 sekúnd, aktivuje sa timeout a gorutina sa ukončí. Môže byť tiež odoslaný signál cez kanál done na nútené ukončenie.
Tento prístup zabraňuje zablokovaniu gorutiny a umožňuje ju bezpečne kontrolovať.