【发布时间】:2019-11-19 21:42:50
【问题描述】:
我目前正在学习 GO,我想复制我们在生产中运行的一项服务,使用 GO 进行培训。我正在使用框架 GIN,我需要验证一个像这样的简单结构。它被发布到搜索端点
type SearchData struct {
Field1 string `json:"field1,omitempty"`
Field2 string `json:"field2,omitempty"`
Field3 string `json:"field,omitempty" binding:"alphanum"`
}
第一个问题:我无法检查if Field3 != nil,因为它是一个字符串,我通过在线阅读找到的一个解决方案是我可以将它转换为指针,问题是我从绑定字母中得到一个错误,因为nil 验证失败。
第二个问题:我可以删除 omitempty 检查,但如果这样做,字母验证器将失败,并且字段设置为默认值“”。我无法检查用户是要提交“”还是设置默认值的 bindingJSON 方法。
通过在线阅读,我发现这个问题没有合适的解决方案(或者可能是的),因为我是 GO 新手,我很高兴看到其他人如何在已发布/生产 API 中处理这个问题。
编辑:这就是我解析 json 的方式
func Search(c *gin.Context) {
db := c.MustGet("db").(*mgo.Database)
var json SearchData
if err := c.ShouldBindJSON(&json); err != nil {
fmt.Println(err)
utils.ReturnError400(c, "Invalid")
return
}
// the json is used here
}
【问题讨论】:
-
我在这里发布结构之前更改了它们,它们都以我的代码中的大写开头
-
是我目前面临的问题的通用示例,字段名称目前不相关,但我将修复问题中的命名谢谢