这是我的验证结构: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
,true
或nil
:
var IsRefreshEmail *bool
这样做的好处是您可以false
比较nil
:
{"email": "hello", "isRefreshEmail": false} {"email": "hello"}
如果没有指针,上面的两个 JSON 在 Unmarshal 之后将是相同的。根据您的情况,您可能不关心这一点。但是,如果您需要知道该值是否被省略,则需要指针。
紫衣仙女
TA贡献1839条经验 获得超15个赞
bool 的默认值为 false
*bool 的默认值为 nil
因此,当与指针一起使用时,您发送的值是 false -> fasle
但是当与 bool 一起使用时 -> 你发送 false -> 通过检查验证并使其验证失败(与默认值相同)
对于值为 0 的 int 和 *int,问题是相同的
- 2 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消