区分 Go 中的 Null 和不存在的 JSON 字段
将 JSON 解组到 Go 结构体时,区分 JSON 字段可能具有挑战性显式设置为 null 的以及 JSON 负载中根本不存在的。这种区别在许多场景中至关重要,因为它会影响数据的语义及其解释。
Go 1.18 解决方案
从 Go 1.18 开始,一个通用的可选结构体可以用来解决这个问题:
type Optional[T any] struct { Defined bool Value *T }
这个结构实现了 UnmarshalJSON接口,允许它区分已定义和未定义的值。解组 JSON 负载时,无论该值是 null 还是有效值,Optional 结构的定义字段都将设置为 true。
示例用法
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[bool] `json:"field2"` Field3 Optional[int32] `json:"field3"` }
解组 JSON 有效负载后,定义的字段可用于确定 JSON 中是否存在特定字段或不是。
Go 1.18 之前的解决方案
对于 1.18 之前的 Go 版本,可以创建自定义类型来实现相同的结果。
type OptionalString struct { Defined bool Value *string }
与Go 1.18中的Optional结构类似,该类型实现了UnmarshalJSON接口相应地设置已定义字段。
用法示例
type Payload struct { SomeField1 string `json:"somefield1"` SomeField2 OptionalString `json:"somefield2"` }
通过使用此自定义类型,可以检查已定义字段以区分空字段和不存在字段.
以上是如何区分 Go 中的 Null 和缺失 JSON 字段?的详细内容。更多信息请关注PHP中文网其他相关文章!