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