區分在解組期間設定為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中文網其他相關文章!