Junior — Middle
Hoe stop je de uitvoering van een goroutine als de verwachte waarde nog niet is bereikt?
sobes.tech AI
Antwoord van AI
In Go, om een goroutine te stoppen die wacht op een waarde, maar die waarde mogelijk niet zal komen, worden meestal kanalen met timeout of een context met annulering gebruikt.
Voorbeeld met timeout via select en time.After:
select {
case val := <-ch:
// waarde ontvangen, ga door met werken
case <-time.After(time.Second * 5):
// timeout, stop de goroutine
}
Een andere manier is het gebruik van een context (context.Context), die van buitenaf kan worden geannuleerd:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// verwerk val
case <-ctx.Done():
// stop de goroutine
}
}()
// ergens in de code, roep cancel() aan om de goroutine te stoppen
Op deze manier blijft de goroutine niet eindeloos wachten en kan deze correct worden beëindigd.