Sobes.tech
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.