我将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与m​​ux.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

08-06 10:28