如何解决杜松子酒如何检查参数是否已发布
type listParams struct {
Status int `form:"status"`
Keyword string `form:"keyword"`
ShowType int `form:"show_type"`
}
func List(c *gin.Context) {
var ReqData listParams
_ = c.ShouldBind(&ReqData)
// I fetch this by PostForm() to check it empy if it equal to empty string
if stat := c.PostForm("status"); stat == "" {
ReqData.Status = -99
}
// .......
}
在这段代码中,我怎么知道这是否是前端发布的 status
?
因为go的默认值,如果我勾选了reqData.Status == 0
,如果前端没有发布,它总是返回true,但在我的情况下,0
是一个有意义的值,所以我不能通过等于 0
来检查它。
那么我有其他方法可以检查吗?
PS:我尝试并发现如果我不分配 gorm
将不会更新结构中的字段:
var d &User{} // User is a definition of user table
d.ID = 1
d.Name = "Joy"
// d.Status = 1 // It has this field,but I dont assign it
db.Model(&User{}).updates(&d)
最后,status
不会更新为 0
(在我看来,d.Status
应该是 0
)
解决方法
使用指针类型规避0默认值:
type listParams struct {
Status &int `form:"status"`
Keyword string `form:"keyword"`
ShowType int `form:"show_type"`
}
检查d.Status
是否为nil
,否则获取关联值
我认为这个限制增加了对构建用户的唯一公共方式的需求。
type user struct { Status int Keyword string ShowTypeint}
func NewUser() (*user) { return &user{Status: -1} }
这样可以确保用户结构仅通过 NewUser 构造,其状态默认值 Status 始终等于 -1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。