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

这是我的验证结构:


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


有人可以解释一下吗?谢谢你。


函数式编程
浏览 84回答 2
2回答

饮歌长啸

布尔值可以表示两个值,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 一起使用时 -> 你发送 false -> 通过检查验证并使其验证失败(与默认值相同)对于值为 0 的 int 和 *int,问题是相同的
打开App,查看更多内容
随时随地看视频慕课网APP