Sobes.tech
Junior — Middle

Ako pravilno zaustaviti tekučo gorutino, če je potrebno, da se zaključi na temelju vanjskog signala ali pogoja, tudi če rezultat še ni dosežen?

sobes.tech AI

Odpoveď od AI

Pre správneho zastavenia bežiacej gorutiny na základe vonkajšieho signálu alebo podmienky v Go sa zvyčajne používajú kontext (context.Context) alebo kanály na prenos signálu zrušenia.

Príklad s použitím kontextu:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            // Prijatý signál zrušenia, ukončujeme gorutinu
            return
        default:
            // Vykonávame prácu
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // V určitom momente zavoláme cancel() na zastavenie gorutiny
    cancel()
}

Tento prístup umožňuje gorutine pravidelne kontrolovať, či bol odoslaný signál na zastavenie, a správne sa ukončiť, aj keď výsledok ešte nebol získaný. Podobne možno použiť kanál na prenos signálu na zastavenie, ale context je idiomatickejší a pohodlnejší spôsob v Go.