我将Gorilla mux用于处理程序,并使用mux.Vars。我正在尝试为使用mux.Vars的处理程序之一编写测试,所以我要做的是
var vars = map[string]string{
"id": user.ID,
}
context.Set(req, 0, vars)
在mux中,键(整数)是未定义的,因此默认情况下为0。当mux.Vars被调用并打印0时,我已经记录了键。我应该能够键入此映射
map[0:map[id:522d14f5b1b92235d6000002]]
通过执行map [key],但返回nil。但是,如果我对map [0]进行硬编码,我将获得正确的值。有什么想法吗?
最佳答案
我并不完全确定我理解这个问题,但是看起来您可能将mux.Var与mux.context混淆了。两者是独立的实体。前者返回从URL路径解析的路由变量。例如,您可以执行以下操作:
r := mux.NewRouter()
r.HandleFunc("/blah/{foo}/", MyHandler)
...
func MyHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
...
}
后者包含您自行设置的上下文变量。例如:
func MyHandler(w http.ResponseWriter, r *http.Request) {
context.Set(r, 0, map[string]string{"id": "myid"})
myMap := context.Get(r, 0)
...
}
您可能会查看一些其他人如何同时使用两者的使用示例,以查看最适合您的用例的示例:
Mux.Vars:https://sourcegraph.com/github.com/gorilla/mux/symbols/go/github.com/gorilla/mux/Vars
mux.context:https://sourcegraph.com/github.com/gorilla/context/symbols/go/github.com/gorilla/context