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

标签 json validation go

这是我的验证结构:

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 值可以表示两个值:falsetrue:

var IsRefreshEmail bool

bool 指针可以表示三个值:falsetruenil:

var IsRefreshEmail *bool

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

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

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

关于json - Go - JSON 验证抛出错误,除非我在结构中使用指针。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73073571/

相关文章:

database - 是否可以只替换文件中的特定行而不重写整个文件

go - 是否有将包拆分为模块化组件的标准做法?

go - 使用golang从 postman 那里获取多个Id的方法是什么

javascript - 为什么每次函数更改后都会存储多个对象?

php - 在 PHP 中将新的键/值对添加到 JSON

angularjs - 如何在AngularJS中做条件最大长度

使用枚举列进行 Laravel 验证

regex - 价格验证的正则表达式

javascript - NodeJS 检测修改过的文件

javascript - 单击复选框时从 json 中删除第一个对象 - AngularJs + NodeJs