我的基本main
設置:請求上下文中嵌套大猩猩丟失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(...)' 如果存在像從未設置的值這樣的問題,它將爲您節省很多麻煩,我還會爲上下文值和未導出的鍵使用自定義getters/setters。其中更安全的實踐和沒有更多的代碼 – joncalhoun