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



这是我的验证结构:

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将抛出异常。

有人能解释一下吗?非常感谢。

布尔值可以表示两个值,falsetrue:

var IsRefreshEmail bool

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

var IsRefreshEmail *bool

这样做的好处是,您可以将falsenil:进行比较

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

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

bool的默认值为false

*bool的默认值为nil

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

但是当与bool->您发送了错误->通过检查进行验证并使其失败验证(与默认值相同(

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

相关内容

  • 没有找到相关文章

最新更新