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.