乏善可陈 2022-04-18 13:30 采纳率: 100%
浏览 61
已结题

go-gin binding:"required"无法接收零值的问题

问题遇到的现象和发生背景
今天测试我post接口的时候,发现一个接收入参问题,我把一个参数设置默认值为0int类型,但是如果传的是0 。 进行入参序列化的时候就报required 错误具体如下:

Key: 'RuleListReq.Status' Error:Field validation for 'Status' failed on the 'required' tag

问题相关代码,请勿粘贴截图

img

type RuleListReq struct {
    RuleType int    `json:"rule_type,omitempty"`
    Name     string `json:"name,omitempty"`
    Status   int   `json:"status" binding:"required"` // 要让前端默认值传 -1 必传值
    Operator string `json:"operator,omitempty"`
    Page     int    `json:"page,omitempty"`
    PageSize int    `json:"page_size,omitempty"`
}

func (sc *SensitiveConfigure) RuleList(c *gin.Context) {
    var form RuleListReq
    // 接参
    if err := c.Bind(&form); err != nil {
        sc.BadResponse(10000, err.Error(), c)
        return
    }
    db := providers.MysqlMb4
    data, total, err := sc.sensitiveRuleDao.RuleList(db, form)
    if err != nil {
        sc.BadResponse(10000, err.Error(), c)
        return
    }
    sc.JsonPageResponse(data, total, c)
}
运行结果及报错内容

{
"code": 10000,
"msg": "参数错误",
"data": "Key: 'RuleListReq.Status' Error:Field validation for 'Status' failed on the 'required' tag"
}

我的解答思路和尝试过的方法

首先我按照网上的百度和其他人解决这个问题的 几乎都是将Status int 类型改成Status *int于是我也将int改成了*int 但是请求后的结果依然还是报这个错误。

我想要达到的结果

是为什么还是报这个错误呢,我之前好奇也在错误中打印了一下 form的 %+v的值为:

form值:{RuleType:0 Name: Status:0xc0002e0ab0 Operator: Page:1 PageSize:10}
为什么还是会有这个问题呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月26日
    • 修改了问题 4月18日
    • 修改了问题 4月18日
    • 修改了问题 4月18日
    • 展开全部

    悬赏问题

    • ¥15 rt-thread线程切换的问题
    • ¥20 python忆阻器数字识别
    • ¥15 无法输出helloworld
    • ¥15 高通uboot 打印ubi init err 22
    • ¥20 PDF元数据中的XMP媒体管理属性
    • ¥15 R语言中lasso回归报错
    • ¥15 网站突然不能访问了,上午还好好的
    • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
    • ¥15 semrush,SEO,内嵌网站,api
    • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊