这是我的验证结构:
type PostEmail struct {
Username string `json:"username" validate:"required"`
Email string `json:"email" validate:"required"`
IsRefreshEmail *bool `json:"isRefreshEmail" validate:"required"`
}
我将IsRefreshEmail
的值指向*bool
。如果我移除指针,并且尝试在没有指针的情况下调用API,API将抛出一个错误的语法错误。只有当布尔值为false
时,才会发生这种情况。如果是true
,即使移除指针,API也会正确响应。
为什么会发生这种情况?这很正常吗?我无法理解,我甚至不知道我的指针是否做错了。我当然知道的是,如果我从bool
中移除*
,并将false
作为字段isRefreshEmail
的值插入poster中,API将抛出异常。
有人能解释一下吗?非常感谢。
布尔值可以表示两个值,false
或true
:
var IsRefreshEmail bool
布尔指针可以表示三个值,false
、true
或nil
:
var IsRefreshEmail *bool
这样做的好处是,您可以将false
与nil
:进行比较
{"email": "hello", "isRefreshEmail": false}
{"email": "hello"}
如果没有指针,上面的两个JSON在Unmarshal之后将完全相同。根据你的情况,你可能不在乎。但是,如果您需要要知道该值是否被省略,则需要指针。
bool的默认值为false
*bool的默认值为nil
因此,当与指针一起使用时,您发送的值为false->fasle
但是当与bool->您发送了错误->通过检查进行验证并使其失败验证(与默认值相同(
对于具有0值的int和*int,问题是相同的