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