Junior — Middle
Wie kann man die Ausführung von Goroutines in Go korrekt mit einem Kontext beenden?
sobes.tech KI
Antwort von AI
Um goroutine in Go kann sicher und kontrolliert beendet werden, indem man das context-Paket verwendet. Es wird ein Kontext mit Abbruchmöglichkeit (context.WithCancel) erstellt, der an die Goroutine übergeben wird. Innerhalb der Goroutine wird der Status des Kontexts regelmäßig durch <-ctx.Done() überprüft. Wenn die Abbruchfunktion aufgerufen wird, wird der Done()-Kanal geschlossen, und die Goroutine kann ordnungsgemäß beendet werden.
Beispiel:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine gestoppt")
return
default:
// Arbeit ausführen
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// nach einiger Zeit die Goroutine stoppen
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // damit die Goroutine Zeit zum Beenden hat
}
Dieser Ansatz ermöglicht es, Goroutines sicher und kontrolliert zu beenden, ohne unsichere Methoden zu verwenden.