为了账号安全,请及时绑定邮箱和手机立即绑定

Go - JSON 验证抛出错误,除非我在结构中使用指针。为什么?

Go - JSON 验证抛出错误,除非我在结构中使用指针。为什么?

Go
函数式编程 2023-01-03 16:54:20
这是我的验证结构:type PostEmail struct {    Username       string `json:"username" validate:"required"`    Email          string `json:"email" validate:"required"`    IsRefreshEmail *bool  `json:"isRefreshEmail" validate:"required"`}我指的是IsRefreshEmailwith的价值*bool。如果我删除指针并尝试在没有它的情况下调用我的 API,API 将抛出错误的语法错误。只有当布尔值为 时才会发生这种情况false。如果true即使您删除了指针,API 也会正确响应。为什么会这样?这是正常的?我无法理解它,我什至不知道我是否用指针做错了。我肯定知道的是,如果我删除*from并在 postman 中为该字段bool插入as 值, API 将抛出异常。falseisRefreshEmail有人可以解释一下吗?谢谢你。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

布尔值可以表示两个值,false或者true

var IsRefreshEmail bool

布尔指针可以表示三个值,false,truenil

var IsRefreshEmail *bool

这样做的好处是您可以false比较nil

{"email": "hello", "isRefreshEmail": false}
{"email": "hello"}

如果没有指针,上面的两个 JSON 在 Unmarshal 之后将是相同的。根据您的情况,您可能不关心这一点。但是,如果您需要知道该值是否被省略,则需要指针。


查看完整回答
反对 回复 2023-01-03
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

bool 的默认值为 false

*bool 的默认值为 nil

因此,当与指针一起使用时,您发送的值是 false -> fasle

但是当与 bool 一起使用时 -> 你发送 false -> 通过检查验证并使其验证失败(与默认值相同)

对于值为 0 的 int 和 *int,问题是相同的


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信