Middle
Czym jest kontekst w Go? Do czego służy? Jak działa anulowanie z powodu limitu czasu?
sobes.tech AI
Odpowiedź od AI
W Go context to pakiet i koncepcja do zarządzania czasem życia operacji, przekazywania sygnałów anulowania i ustawiania limitów czasowych między gorutynami.
Główne zadania kontekstu:
- Anulowanie operacji (np. w przypadku przekroczenia limitu czasu lub anulowania przez użytkownika),
- Przekazywanie wartości (np. ID żądania) przez łańcuch wywołań,
- Ustawianie limitów czasowych (timeoutów).
Anulowanie na podstawie limitu czasu działa tak:
- Tworzy się kontekst z limitem czasu lub timeoutem, np.
context.WithTimeout. - Po upływie czasu kontekst jest automatycznie anulowany.
- Gorutyna słuchająca tego kontekstu otrzymuje sygnał anulowania przez kanał
Done(). - Gorutyna powinna poprawnie obsłużyć anulowanie (np. przerwać pracę i zwolnić zasoby).
Przykład:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operacja zakończona")
case <-ctx.Done():
fmt.Println("operacja anulowana lub przekroczono limit czasu")
}
Operacja zostanie przerwana po 2 sekundach, jeśli nie zakończy się wcześniej.