这是我的验证结构:
type PostEmail struct {
Username string `json:"username" validate:"required"`
Email string `json:"email" validate:"required"`
IsRefreshEmail *bool `json:"isRefreshEmail" validate:"required"`
}
我用 *bool
指向 IsRefreshEmail
的值。如果我删除指针并尝试在没有它的情况下调用 API,则 API 将抛出错误的语法错误。
仅当 bool 值为 false
时才会发生这种情况。如果它是true
,即使您删除指针,API 也会正确响应。
为什么会发生这种情况?这是正常的?我无法理解它,我什至不知道我的指针是否做错了。我确信的是,如果我从 bool
中删除 *
并将 false
作为 postman 中字段 isRefreshEmail< 的值插入
API 将抛出异常。
有人可以解释一下吗?谢谢。
最佳答案
bool 值可以表示两个值:false
或 true
:
var IsRefreshEmail bool
bool 指针可以表示三个值:false
、true
或 nil
:
var IsRefreshEmail *bool
这样做的好处是,您可以将 false
与 nil
进行比较:
{"email": "hello", "isRefreshEmail": false}
{"email": "hello"}
如果没有指针,上面的两个 JSON 在 Unmarshal 后将是相同的。 根据您的情况,您可能不关心这一点。但是如果你需要 要知道该值是否被省略,则需要指针。
关于json - Go - JSON 验证抛出错误,除非我在结构中使用指针。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73073571/