РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1028 of 1593 menu

Метод http.Request.Context

Метод http.Request.Context возвращает контекст, связанный с текущим HTTP-запросом. Контекст содержит информацию о времени выполнения запроса, а также может хранить пользовательские данные. Метод не принимает никаких параметров и возвращает значение типа context.Context.

Синтаксис

ctx := req.Context()

Пример 1

Давайте получим контекст запроса и выведем его значение:

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { ctx := r.Context() fmt.Fprintf(w, "Context: %v", ctx) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

Пример 2

Давайте проверим, завершен ли контекст запроса:

package main import ( "context" "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { ctx := r.Context() select { case <-ctx.Done(): fmt.Fprintf(w, "Request cancelled") default: fmt.Fprintf(w, "Request is active") } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

Пример 3

Давайте получим значение из контекста запроса:

package main import ( "context" "fmt" "net/http" ) type key string const userIDKey key = "userID" func handler(w http.ResponseWriter, r *http.Request) { ctx := context.WithValue(r.Context(), userIDKey, "12345") r = r.WithContext(ctx) userID := r.Context().Value(userIDKey) fmt.Fprintf(w, "User ID: %s", userID) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

Пример 4

Давайте обработаем отмену контекста при получении сигнала:

package main import ( "fmt" "net/http" "time" ) func handler(w http.ResponseWriter, r *http.Request) { ctx := r.Context() select { case <-time.After(5 * time.Second): fmt.Fprintf(w, "Request completed") case <-ctx.Done(): http.Error(w, "Request cancelled", http.StatusRequestTimeout) } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }

Результат выполнения кода:

"Request completed"

Смотрите также

  • метод http.Request.WithContext,
    который создает копию запроса с новым контекстом
  • метод http.Request.Clone,
    который клонирует запрос с новым контекстом
  • метод http.NewRequest,
    который создает новый HTTP-запрос с контекстом по умолчанию
  • метод http.NewRequestWithContext,
    который создает новый HTTP-запрос с указанным контекстом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить