Sobes.tech
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.WithCancel of context.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.