首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang语法分析形式

Golang语法分析形式
EN

Stack Overflow用户
提问于 2015-02-01 11:15:55
回答 2查看 24.5K关注 0票数 7

如果我有以下表单设置:

代码语言:javascript
复制
{{ 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可以包含多个结构

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-01 12:53:42

表单键看起来像rating[id],其中id是一个值标识符。要获取其中一个值,请在用id替换实际的id值之后调用r.FormValue("rating[id]")

我建议打印表单,看看发生了什么:

代码语言:javascript
复制
fmt.Printf("%+v\n", r.Form)  // No () following Form, Form is not a function

form是一个url.Values。url.Values是一个映射字符串。您可以按如下方式遍历表单:

代码语言:javascript
复制
for key, values := range r.Form {   // range over map
  for _, value := range values {    // range over []string
     fmt.Println(key, value)
  }
}
票数 14
EN

Stack Overflow用户

发布于 2016-02-25 14:29:35

对于其他正在寻找答案的人,我发现真的很有帮助。它允许您将表单解析为结构,并支持数组和嵌套结构。当您将其与包结合使用时,您可以轻松地解析带有可选字段的结构。

示例: Go:

代码语言:javascript
复制
package models

import (
    "github.com/gorilla/schema"
    "gopkg.in/guregu/null.v3"
)

type User struct {
    Id            null.Int    `db:"id" json:"id"`
    // Custom mapping for form input "user_name" 
    Name          string      `db:"user_name" json:"user_name" schema:"user_name"`
    EmailAddress  string      `db:"email_address" json:"email_address"`
    OptionalField null.String `db:"optional_field" json:"optional_field"`
}

示例html

代码语言:javascript
复制
<form>
    <input type="text" name="user_name">
    <input type="text" name="EmailAddress">
    <input type="text" name="OptionalField">
</form>
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28259063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档