Junior — Middle
Hoe kun je meerdere lopende goroutines in Go geforceerd stoppen?
sobes.tech AI
Antwoord van AI
In Go wordt de mechanisme van annulering via de context (context.Context) meestal gebruikt om meerdere goroutines geforceerd te stoppen.
Het hoofdidee:
- Er wordt een context met annulering gemaakt (
context.WithCancelofcontext.WithTimeout). - Elke goroutine ontvangt deze context en controleert periodiek of deze is geannuleerd.
- Wanneer de cancel-functie (
cancel()) wordt aangeroepen, ontvangen alle goroutines het signaal en kunnen ze correct afsluiten.
Voorbeeld:
ctx, cancel := context.WithCancel(context.Background())
for i := 0; i < 5; i++ {
go func(id int) {
for {
select {
case <-ctx.Done():
fmt.Printf("Goroutine %d gestopt\n", id)
return
default:
// werk van de goroutine
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// Na enige tijd stoppen we alle goroutines
time.Sleep(1 * time.Second)
cancel()
// Wachten tot ze klaar zijn (bijvoorbeeld met sync.WaitGroup)
Deze aanpak maakt het mogelijk om het stoppen van meerdere goroutines centraal te beheren en problemen met oncontroleerbare beëindiging te voorkomen.