区分在解组期间设置为 Null 和不存在的 JSON 字段
将 JSON 解组到 Golang 结构体时,区分设置为 null 的字段不存在的字段可能至关重要。这两种情况都会导致结构体中出现 nil 值,从而模糊了预期的语义。
使用泛型进行区分 (Go 1.18 )
Go 1.18 引入了泛型,通过以下方式实现了简洁的解决方案单个泛型类型:
type Optional[T any] struct { Defined bool Value *T }
此类型封装了具有已定义字段状态(已定义)的可选值的概念。
用法示例:
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[int] `json:"field2"` }
解组后,具有已定义值的字段 (已定义 == true )可以区分空值(Value == nil)和缺失值(Defined == false)。
预泛型解决方案
自定义类型包装器:
type OptionalString struct { Defined bool Value *string } func (os *OptionalString) UnmarshalJSON(data []byte) error { os.Defined = true return json.Unmarshal(data, &os.Value) }
示例用法:
type Payload struct { Field1 string `json:"field1"` Field2 OptionalString `json:"field2"` }
限制:
以上是在 Go 中解组时如何区分 JSON 空值和缺失字段?的详细内容。更多信息请关注PHP中文网其他相关文章!