Go语言JSON验证为何需用结构体指针?布尔false报错解析
问题解答
现象原因
- Go语言中
bool类型的零值是false。当结构体字段为普通bool时,即便你主动传入false,JSON解析后字段值和“未传入该字段”的结果一致,都是false。而你使用的验证库(如validator)的required规则,会把基本类型的零值判定为未提供,所以传入false会触发验证错误;但传入true时,不是零值,验证器判定字段已提供,因此能正常响应。 - 当字段改为
*bool指针类型后,指针的零值是nil。无论你传入true还是false,JSON解析器都会为指针分配内存并赋值,此时指针不再是nil,验证器通过“指针是否为nil”判断字段已提供,所以两种值都能通过验证;只有未传入该字段时,指针保持nil,才会触发required错误,这符合业务逻辑。
是否属于正常情况
这是正常现象,属于验证库required规则的设计逻辑——针对基本类型和指针类型采用不同的判定方式,以此区分“用户主动传入零值”和“字段未提供”两种场景。
指针用法是否正确
你的指针用法是完全正确的。在需要区分“用户主动传入零值”和“字段未提供”的场景下,使用指针类型是Go开发中的常规解决方案,刚好解决了bool类型零值与合法输入混淆的问题。
内容的提问来源于stack exchange,提问作者Melom
相关产品推荐
相关产品推荐

