Должен ли я создавать новый контекст в каждом входящем запросе? - PullRequest
0 голосов
/ 11 декабря 2019

В течение последних нескольких дней я читал о Go, и одной концепцией, к которой я продолжаю возвращаться, являются контексты.

Мне кажется, я понимаю мотивацию создания такой структуры. То, что я не понимаю, это особый случай использования контекста во входящем HTTP-запросе.

Допустим, у нас есть следующий httpHandlerFunc. Внутри этого обработчика мы вызываем функцию, которая требует передачи контекста. Я часто видел это решение

func myHandler(w http.ResponseWriter, r *http.Request) {
  ctx := context.WithValue(context.Background(), "request", r)
  otherFunc(ctx)
}

Мой вопрос: почему бы нам просто не передать контекст из запроса, например, так:

func myHandler(w http.ResponseWriter, r *http.Request) {
  otherFunc(r.Context())
}

Разве это не имеет больше смысла дляпередать контекст запроса, так как мы хотим, чтобы контекст проходил через нашу программу? Я думал, что создание фонового контекста - это то, что мы хотим делать только в корневом родительском элементе, например init() function.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...