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

  1. Tworzy się kontekst z limitem czasu lub timeoutem, np. context.WithTimeout.
  2. Po upływie czasu kontekst jest automatycznie anulowany.
  3. Gorutyna słuchająca tego kontekstu otrzymuje sygnał anulowania przez kanał Done().
  4. 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.