Sobes.tech
Junior — Middle

Ako správne zastaviť vykonávanie goroutine pomocou kontextu v Go?

sobes.tech AI

Odpoveď od AI

Pre správneho ukončenia goroutine v Go sa často používa balík context. Vytvorí sa kontext s možnosťou zrušenia (context.WithCancel), ktorý sa odovzdá goroutine. Vo vnútri goroutine sa pravidelne kontroluje stav kontextu cez <-ctx.Done(). Keď sa zavolá funkcia zrušenia, kanál Done() sa zatvorí a goroutine sa môže správne ukončiť.

Príklad:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine ukončená")
            return
        default:
            // vykonávanie práce
        }
    }
}

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

    // po určitom čase ukončíme goroutine
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // aby goroutine mala čas sa ukončiť
}

Tento prístup umožňuje bezpečné a kontrolované ukončenie goroutine bez použitia nebezpečných metód.