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.