Sobes.tech
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.