我正在学习golang并尝试实现自定义组合以熟悉该语言,不幸的是req.Form
返回了nil
。
我当然是在req.ParseForm()
之前跑。
func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
req.ParseForm()
params := req.Form
node, _ := r.tree.findNode(strings.Split(req.URL.Path, "/")[1:], params)
if handler := node.methods[req.Method]; handler != nil {
handler(w, req, params)
}
}
这是我通过GET http://localhost:8080/users/3
使用的示例URL
答案 0 :(得分:1)
根据文档,如果您致电req.Form
,应始终对req.ParseForm
进行更新。
对于所有请求,ParseForm都会从URL解析原始查询并更新r.Form。
此外,如果您看一下ParseForm的实现,执行该方法后似乎不可能是nil
。
https://github.com/golang/go/blob/master/src/net/http/request.go#L1238
确实可能发生的事情是,req.Form
最终变成一张空的地图,也许那就是您在那看到的东西。
如果您正在执行此操作,则将其为空是有道理的
GET http://localhost:8080/users/3
由于没有ParseForm
可以实际解析的参数,因此req.Form
最终将是一个空映射。
例如,如果您尝试这样做:
GET http://localhost:8080/users/3?a=b
然后,您应该在地图中获得一个条目,并以"a"
作为键,并以["b"]
作为值。