请求表返回零

时间:2019-06-27 16:18:28

标签: go url mux

我正在学习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

1 个答案:

答案 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"]作为值。