Sobes.tech
Junior — Middle

Wie kann man eine laufende Goroutine korrekt stoppen, wenn es notwendig ist, dass sie basierend auf einem externen Signal oder einer Bedingung beendet wird, auch wenn das Ergebnis noch nicht vorliegt?

sobes.tech KI

Antwort von AI

Um eine laufende Goroutine in Go korrekt durch ein externes Signal oder eine Bedingung zu stoppen, verwendet man in der Regel den Kontext (context.Context) oder Kanäle, um das Abbruchsignal zu übertragen.

Beispiel mit Verwendung des Kontexts:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            // Abbruchsignal empfangen, Goroutine beenden
            return
        default:
            // Arbeit ausführen
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // Irgendwann rufen wir cancel() auf, um die Goroutine zu stoppen
    cancel()
}

Dieser Ansatz ermöglicht es der Goroutine, regelmäßig zu prüfen, ob ein Stopp-Signal gesendet wurde, und sich korrekt zu beenden, auch wenn das Ergebnis noch nicht vorliegt. Ähnlich kann man einen Kanal verwenden, um das Stopp-Signal zu übertragen, aber context ist eine idiomatischere und bequemere Methode in Go.