2012-12-08 6 views
11

私は単純なhtmlフォームをgoで処理しようとしています。ただし、投稿時に投稿データを取得することはできません。 r.Formマップは常に[]です。私がどこに間違っているのか分からない。request.Post配列はフォーム提出時に空です

ありがとうございます。

は、ここでは、最初ParseFormを呼び出す必要がありますように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> 
` 

答えて

11

が見えるコードです。 go docsから

// Form contains the parsed form data, including both the URL 
// field's 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) 
} 
+0

ありがとうございます!私は執筆ウェブアプリケーションの記事[http://golang.org/doc/articles/wiki/#tmp_8](http://golang.org/doc/articles/wiki/#tmp_8)に従っていた。おそらく少し古いとParseForm()は言及していません。 – rputikar

+1

この例では、必要に応じてParseFormを呼び出すFormValueメソッドを使用しています。 Form変数に直接アクセスしているので、ParseFormを直接呼び出す必要があります。 – masebase

関連する問題