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.