Sobes.tech
Senior

Können Sie Beispiele für die Verwendung von WithCancel, WithTimeout und WithDeadline geben?

sobes.tech KI

Antwort von AI

Im Go-Paket context gibt es Funktionen zum Erstellen von Kontexten mit Abbruch- und Zeitbegrenzungsoptionen:

  • WithCancel — erstellt einen Kontext, der manuell durch Aufruf der Funktion cancel() abgebrochen werden kann. Wird verwendet, wenn eine Operation durch ein Ereignis abgebrochen werden soll.

  • WithTimeout — erstellt einen Kontext, der nach einem festgelegten Zeitraum automatisch abgebrochen wird.

  • WithDeadline — erstellt einen Kontext, der zu einem bestimmten Zeitpunkt abgebrochen wird.

Beispiele:

ctx, cancel := context.WithCancel(context.Background())
// Starten einer Goroutine, die den Kontext nach 2 Sekunden abbricht
go func() {
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-ctx.Done():
    fmt.Println("Operation abgebrochen")
}

// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// Operation, die nach 3 Sekunden abbricht

// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// Operation, die zu einem festgelegten Zeitpunkt abbricht

Diese Mechanismen sind nützlich, um die Ausführungszeit von Anfragen zu kontrollieren, lange Operationen abzubrechen und Ressourcen zu verwalten.