如果我有以下表单设置:
{{ range $key,$value := .scores }} <input id="{{$value.Id}}_rating__1" type="radio" name="rating[{{$value.Id}}]" value="-1"> <input id="{{$value.Id}}_rating__0" type="radio" name="rating[{{$value.Id}}]" value="0"> <input id="{{$value.Id}}_rating__2" type="radio" name="rating[{{$value.Id}}]" value="+1"> {{ end }}
那我怎样才能正确提取数据呢?知道那里.scores可以包含多个结构
func categoryViewSubmit(w http.ResponseWriter,r *http.Request) { err := r.ParseForm() if err != nil { log.Fatal(err) } fmt.Println("POST") fmt.Printf("%+v\n",r.Form()) // annot call non-function r.Form (type url.Values) fmt.Printf("%+v\n",r.FormValue("rating")) // Returns nothing }
表单键看起来像rating [id],其中id是值标识符.要获取其中一个值,请在将id替换为实际id值后调用r.FormValue(“rating [id]”).
我建议打印表单以查看发生了什么:
fmt.Printf("%+v\n",r.Form) // No () following Form,Form is not a function
form是url.Values. url.Values是map [string] []字符串.您可以按如下方式遍历表单:
for key,values := range r.Form { // range over map for _,value := range values { // range over []string fmt.Println(key,value) } }