Форма запроса возвращается ноль - PullRequest
0 голосов
/ 27 июня 2019

Я изучаю 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)
    }
}

Это пример URL, который я использую через GET http://localhost:8080/users/3

1 Ответ

1 голос
/ 27 июня 2019

Согласно документации, 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"] в качестве значения.

...