我想封送进封送出x-www-form-urlcoding,类似于使用json或XML可以做到这一点.有没有现成的软件包来做这件事,或者如果没有的话,有没有关于如何自己实现的文档?

推荐答案

gorilla/schema很受欢迎,而且维护得很好:

例如

func FormHandler(w http.RequestWriter, r *http.Request) {

    err := r.ParseForm()
    if err != nil {
         // handle error
    }
    person := new(Person) // Person being a struct type
    decoder := schema.NewDecoder()

    err = decoder.Decode(person, r.Form)
    if err != nil {
         // handle error
    }

}

goforms也是一种 Select .

Update May 23rd 2015:

  • 我仍然 Select Gorilla/schema作为最受支持的map-to-struct包之一,POST表单值是一个常见的用例.
  • goji/param也相当可靠,并且具有许多相同的功能.
  • mholt/binding的功能稍微多了一点,代价是(IMO)稍微复杂一点的API.

我使用Gorilla/schema已经有几年了,没有遇到任何重大问题.我将它与vala结合使用,用于在输入进入数据库之前验证它们(不是零、太短、太长等等).

Go相关问答推荐

Golang测试容器,无法使网络正常工作

如何防止程序B存档/删除围棋中程序A当前打开的文件?

使用 goroutine 比较 Golang 中的两棵树是等价的

在多个 struct 体中重用 Go 中的函数

将字符串格式的x509证书生成主题名称

Golang校验器包:重命名字段错误处理

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

当我的 go build 成功时,如何修复我的 docker build 失败? Dockerfile 包括 go mod 下载

如何以干净的方式在中间件中注入 repo 或服务?

如何在 `hashicorp / terraform-exec` 中将 `ApplyConfig` 传递给 `tf.Apply()`?

如何使用管理员权限启动 powershell 进程并重定向标准输入 (os.exec)

没有任务角色的 AWS CDK ECS 任务定义

在嵌套模板中使用变量,它也被定义为 go 模板中的变量?

枚举的 Golang 验证器自定义验证规则

在 Go GRPC 服务器流式拦截器上修改元数据

将 []float64 像素切片转换为图像

没有堆栈跟踪的 go 程序崩溃是什么意思?

panic :拨号 tcp:在 172.22.64.1:53 上查找 bookstoreDB:没有这样的主机

当 git clone 工作时,Go mod tidy 在私有存储库上失败

递归数据 struct 解组在 Go Lang Protobuf 中给出错误无法解析无效的线格式数据