アンマーシャリング中に Null に設定された JSON フィールドと存在しない JSON フィールドを区別する
JSON を Golang 構造体にアンマーシャリングするとき、null に設定されたフィールド間の区別存在しないフィールドが重要になる可能性があります。どちらのシナリオでも構造体に nil 値が含まれ、意図したセマンティクスがわかりにくくなります。
ジェネリックを使用した区別 (Go 1.18)
Go 1.18 ではジェネリックが導入され、次のような簡潔なソリューションが可能になります。単一のジェネリック型:
type Optional[T any] struct { Defined bool Value *T }
This type は、定義されたフィールドの状態 (Defined) を持つオプションの値の概念をカプセル化します。
使用例:
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[int] `json:"field2"` }
アンマーシャリング後、定義された値を持つフィールド (Defined) == true) は、null 値 (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 Null フィールドと欠落フィールドを区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。