В течение последних нескольких дней я читал о 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.