【Go】ShouldBind解析json获取空的数据——踩坑解决

一、问题

正常这个问题的解决方案:将获取json的结构体成员变量都改为大写,一般能解决90%的问题,但是我这里是自身的问题或者和公司有关。

代码:

	var param SourceParam
	cgtx := c.GinContext
	if err := cgtx.ShouldBind(&param); err != nil {
		logs.CtxWarn(cgtx, "[xx] bind common_param error err=%+v", err)
		return response.NewBadJsonOutput(c, err.Error(), "初始化参数错误")
	}

在公司接口获取json数据时,首先是Field validation for ‘DateType’ failed on the ‘required’ tag出现错误,原因是DateType设定为required,所以会去校验搞参数是否存在。

在出现该问题后,我将binding:"required"去掉,但是发现后面依然会错误,解析出的param参数都是空的数据。

通过寻求网络帮助,发现都没有我所需要的,都是说参数要大写表示是public,而我代码是符合的。也就是说网络上的解决方案都没有和我一样的。所以,我觉得可能是其它参数的问题,于是乎一顿魔改加对比其他接口,发现问题所在。

ShouldBind修改为ShouldBindJSON后问题瞬间解决,可以说是非常简单但是正常人是不太可能想到的。因为这是公司老代码,我寻思既然在线上能够正常运行,我根本无需修改它,所以也就不会想到这个问题。

但是确实,ShouldBind就无法绑定得到数据,所以我怀疑是gin框架源码里的限制,当然公司里应该是基于gin修改的框架,所以在里面某个位置做了限制操作。

二、反思

一般来说,对于老代码,我们都不会去修改它,非常确信它是对的,但是随着时间流逝,老的框架和代码不断被新代码冲击,可能就会失去它原有的意义。而后来人修改新的代码,加入新的限制,可能老的逻辑和思路就行不通了,所以在遇到玄学问题的时候,最好思考其它方面,可能就一些小细节导致了错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗夜无风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值