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.