Sobes.tech
Junior — Middle

Jak správně zastavit běh gorutin v Go pomocí kontextu?

sobes.tech AI

Odpověď od AI

Pro správné ukončení gorutin v Go se často používá balíček context. Vytvoří se kontext s možností zrušení (context.WithCancel), který se předá gorutině. Uvnitř gorutiny se pravidelně kontroluje stav kontextu přes <-ctx.Done(). Když se zavolá funkce zrušení, kanál Done() se uzavře a gorutina se může správně ukončit.

Příklad:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Gorutina ukončena")
            return
        default:
            // vykonávání práce
        }
    }
}

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

    // po nějaké době ukončíme gorutinu
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // aby gorutina měla čas se ukončit
}

Tento přístup umožňuje bezpečné a kontrolované ukončení gorutin bez použití nebezpečných metod.