gpt4 book ai didi

binding - Martini 绑定(bind)似乎不起作用

转载 作者:IT王子 更新时间:2023-10-29 02:16:56 24 4
gpt4 key购买 nike

我正在玩 Martini,出于某种原因我无法让 contrib 绑定(bind)​​包工作。

我的结构没有绑定(bind)值。我已将代码缩减为最简单的形式,但它仍然无法正常工作。

谁能看出我做错了什么?

package main

import (
"github.com/go-martini/martini"
"github.com/martini-contrib/binding"
"net/http"
)

var html string = `<form method="POST" enctype="application/x-www-form-urlencoded"><input name="un" type="text" /><input type="submit" value="Some button" /></form>`

type FormViewModel struct {
Username string `form: "un"`
}

func main() {
m := martini.Classic()

m.Get("/", func(w http.ResponseWriter) {
w.Header().Add("content-type", "text/html")
w.Write([]byte(html))
})

m.Post("/", binding.Form(FormViewModel{}), func(vm FormViewModel) string {
return "You entered: " + vm.Username
})

m.Run()
}

最佳答案

这只是与结构体字段关联的标签定义中的解析问题。

您需要删除 form: 之后的空白字符

如果这样写结构:

type FormViewModel struct {
Username string `form:"un"` // No blank after form:
}

...它应该工作得更好。

Go 语言规范说:

按照惯例,标记字符串是可选的以空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由除空格(U+0020 ' ')、引号(U+0022 '"')和冒号(U+003A ':')之外的非控制字符组成。每个值都被引用使用 U+0022 '"' 字符和 Go 字符串文字语法。

显然,在 the reflect package 中实现的解析器冒号后不允许有空格。

关于binding - Martini 绑定(bind)似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com