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.