Junior — Middle
Hoe kun je een lopende goroutine correct stoppen, als het nodig is dat deze eindigt op basis van een extern signaal of voorwaarde, zelfs als het resultaat nog niet is ontvangen?
sobes.tech AI
Antwoord van AI
Om een lopende goroutine correct te stoppen door een extern signaal of voorwaarde in Go, worden meestal context (context.Context) of kanalen gebruikt om het annuleringssignaal door te geven.
Voorbeeld met gebruik van context:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Annuleringssignaal ontvangen, goroutine beëindigen
return
default:
// Werk uitvoeren
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Op een bepaald moment roepen we cancel() aan om de goroutine te stoppen
cancel()
}
Deze aanpak stelt de goroutine in staat om regelmatig te controleren of er een stop-signaal is verzonden en correct te beëindigen, zelfs als het resultaat nog niet is verkregen. Evenzo kan een kanaal worden gebruikt om het stop-signaal door te geven, maar context is een meer idiomatische en handige manier in Go.