Senior
Czy możesz podać przykłady użycia WithCancel, WithTimeout i WithDeadline?
sobes.tech AI
Odpowiedź od AI
W pakiecie context w Go znajdują się funkcje do tworzenia kontekstów z możliwością anulowania i ograniczeniem czasu wykonania:
-
WithCancel — tworzy kontekst, który można anulować ręcznie, wywołując funkcję cancel(). Używa się go, gdy trzeba przerwać operację na podstawie zdarzenia.
-
WithTimeout — tworzy kontekst, który automatycznie zostanie anulowany po określonym czasie.
-
WithDeadline — tworzy kontekst, który zostanie anulowany w określonym momencie.
Przykłady:
ctx, cancel := context.WithCancel(context.Background())
// Uruchamiamy gorutynę, która anuluję kontekst po 2 sekundach
go func() {
time.Sleep(2 * time.Second)
cancel()
}()
select {
case <-ctx.Done():
fmt.Println("Operacja anulowana")
}
// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// operacja, która zostanie przerwana po 3 sekundach
// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// operacja, która zostanie przerwana w określonym czasie
Te mechanizmy są przydatne do kontrolowania czasu wykonywania zapytań, anulowania długich operacji i zarządzania zasobami.