Sobes.tech
Junior — Middle

Hoe kun je het correct stoppen van goroutines met behulp van context in Go?

sobes.tech AI

Antwoord van AI

Om goroutines in Go correct te stoppen, wordt vaak gebruik gemaakt van het context-pakket. Er wordt een context met annulering (context.WithCancel) aangemaakt, die wordt doorgegeven aan de goroutine. Binnen de goroutine wordt de status van de context periodiek gecontroleerd via <-ctx.Done(). Wanneer de cancel-functie wordt aangeroepen, wordt het Done()-kanaal gesloten en kan de goroutine correct afsluiten.

Voorbeeld:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine gestopt")
            return
        default:
            // werk uitvoeren
        }
    }
}

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

    // na enige tijd de goroutine stoppen
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // zodat de goroutine kan afsluiten
}

Deze aanpak maakt het mogelijk om goroutines veilig en gecontroleerd te beëindigen zonder gebruik te maken van onveilige methoden.