Junior — Middle
Wie kann man mehrere laufende Goroutines in Go zwangsweise stoppen?
sobes.tech KI
Antwort von AI
In Go wird zum erzwungenen Stoppen mehrerer laufender Goroutines in der Regel der Abbruchmechanismus über den Kontext (context.Context) verwendet.
Hauptidee:
- Es wird ein Kontext mit Abbruch erstellt (
context.WithCancelodercontext.WithTimeout). - Jede Goroutine erhält diesen Kontext und überprüft regelmäßig, ob er abgebrochen wurde.
- Beim Aufruf der Abbruchfunktion (
cancel()) erhalten alle Goroutines das Signal und können ordnungsgemäß beendet werden.
Beispiel:
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 gestoppt\n", id)
return
default:
// Goroutine-Arbeit
time.Sleep(100 * time.Millisecond)
}
}
}(i)
}
// Nach einiger Zeit stoppen wir alle Goroutines
time.Sleep(1 * time.Second)
cancel()
// Warten auf Abschluss (z.B. mit sync.WaitGroup)
Dieser Ansatz ermöglicht eine zentrale Steuerung des Stopps mehrerer Goroutines und vermeidet Probleme mit unkontrolliertem Beenden.