Junior — Middle
Kako pravilno zaustaviti izvršavanje goroutine-a koristeći kontekst u Go?
sobes.tech АИ
Одговор од АИ
Za pravilno zaustavljanje goroutine u Go često se koristi paket context. Kreira se kontekst sa mogućnošću otkazivanja (context.WithCancel), koji se prosleđuje goroutine-u. Unutar goroutine-a, stanje konteksta se periodično proverava putem <-ctx.Done(). Kada se pozove funkcija otkazivanja, kanal Done() se zatvara, i goroutine može pravilno da se završi.
Primer:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine zaustavljena")
return
default:
// izvršavanje posla
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// nakon određenog vremena zaustavljamo goroutine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // da goroutine ima vremena da se završi
}
Ovaj pristup omogućava sigurno i kontrolisano zaustavljanje goroutine-a bez korišćenja nesigurnih metoda.