Моя основная main
установка:контекст запроса устанавливается в NEGRONI промежуточного слоя теряется в гнездовой гориллы Subrouter
muxRouter := mux.NewRouter()
v1Router.Router(muxRouter.PathPrefix("/v1").Subrouter())
http.Handle("/", muxRouter)
n := negroni.Classic()
n.Use(negroni.HandlerFunc(apiRouter.Middleware))
n.UseHandler(muxRouter)
s := &http.Server{
Addr: ":6060",
Handler: n,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())
Внутри apiRouter.Middleware
я задал следующий контекст:
context.Set(req, helperKeys.DomainName, "some-value")
Однако в некоторых HandlerFunc в v1Router.Router
при попытке установить Get
значение контекста, результат равен нулю:
domain := context.Get(req, helperKeys.DomainName)
fmt.Println("DomainName", domain)
Печать: DomainName <nil>
Я знаю, что метод Set
является правильным, как получить значения сразу после установки его в apiRouter.Middleware
будет возвращать правильное значение строки.
Пожалуйста, используйте длинную версию преобразования типа '(домен, хорошо: = REQ .Context(). Value (...) ' Это сэкономит вам много головных болей, если есть проблема, такая как значение, которое никогда не будет установлено. Я бы также использовал пользовательские геттеры/сеттеры для значений контекста и неактивных ключей. из которых более безопасны на практике и не намного больше кода. – joncalhoun