Подтвердить что ты не робот

Request.Post массив пуст после отправки формы

Я пытаюсь обработать простую форму html в go. Однако я не могу получить какие-либо данные после отправки. Карта r.Form всегда []. Не знаю, где я ошибаюсь.

Спасибо заранее.

Вот код http://play.golang.org/p/aZxPCcRAVV

package main

import (
    "html/template"
    "log"
    "net/http"
)

func rootHandler(w http.ResponseWriter, r *http.Request) {
    t, _ := template.New("form.html").Parse(form)
    t.Execute(w, "")
}

func formHandler(w http.ResponseWriter, r *http.Request) {
    log.Println(r.Form)
    rootHandler(w, r)
}

func main() {
    http.HandleFunc("/", rootHandler)
    http.HandleFunc("/login", formHandler)
    http.ListenAndServe("127.0.0.1:9999", nil)
}

var form = `
<h1>Login</h1>
<form action="/login" method="POST">
<div><input name="username" type="text"></div>
<div><input type="submit" value="Save"></div>
</form>
`
4b9b3361

Ответ 1

Похоже, вам нужно сначала вызвать ParseForm. Из документов go

// Form contains the parsed form data, including both the URL
// field query parameters and the POST or PUT form data.
// This field is only available after ParseForm is called.
// The HTTP client ignores Form and uses Body instead.
Form url.Values

И некоторый код, чтобы ваш пример работал.

func formHandler(w http.ResponseWriter, r *http.Request) {
    err := r.ParseForm()
    if err != nil {
       //handle error http.Error() for example
       return
    }
    log.Println(r.Form)
    rootHandler(w, r)
}