登录
首页 >  Golang >  Go问答

为什么在Golang中使用指针在JSON验证时可以避免错误抛出?

来源:stackoverflow

时间:2024-02-23 15:18:26 287浏览 收藏

本篇文章给大家分享《为什么在Golang中使用指针在JSON验证时可以避免错误抛出?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

这是我的验证结构:

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 将抛出错误的语法错误。 仅当布尔值为 false 时才会发生这种情况。如果是 true,即使您删除指针,api 也会正确响应。

为什么会发生这种情况?这是正常的?我无法理解它,我什至不知道我的指针是否做错了。我确信的是,如果我从 bool 中删除 * 并将 false 作为 postman 中 isrefreshemail 字段的值插入,则 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 -> 一起使用时,您发送 false -> 通过检查进行验证并使其验证失败(与默认值相同)

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

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《为什么在Golang中使用指针在JSON验证时可以避免错误抛出?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>