Go の JSON Null フィールドと欠落フィールド: 比較
Go で JSON データを操作する場合、フィールドを区別することが重要です。明示的に null に設定されているフィールドや、単に JSON 入力から欠落しているフィールド。この区別は、JSON データが Golang 構造体を表す場合に必要になります。
null フィールドと欠落フィールドの両方が、対応する Go struct フィールドの nil 値になります。ただし、フィールドが意図的に null に設定されているか、JSON データに含まれていないかを判断するには、2 つのシナリオを区別することが重要です。
この課題に対処するには、次の 2 つのアプローチが利用可能です。
ジェネリックでのオプションの構造体の使用 (Go 1.18 )
Go 1.18 ではジェネリックが導入され、この状況に対処するためのジェネリックな Optional 構造体の作成が可能になります。 Optional struct には、JSON 入力内の値の存在を示す定義済みのブール型フィールドと、実際の値への Value ポインターが備わっています。
type Optional[T any] struct { Defined bool Value *T }
type Payload struct { Field1 Optional[string] `json:"field1"` Field2 Optional[bool] `json:"field2"` Field3 Optional[int32] `json:"field3"` }
カスタム オプション構造体の使用 (プレジェネリクス) )
ジェネリックスの前に、カスタムの Optional* 構造体を次のように指定できます。オプションとして処理する必要があるデータ型ごとに作成されます。
type OptionalString struct { Defined bool Value *string }
type Payload struct { SomeField1 string `json:"somefield1"` SomeField2 OptionalString `json:"somefield2"` }
これらの手法を使用することで、開発者は、JSON フィールドが明示的に null に設定されているか、入力データに存在していないかを簡単に識別できます。により、データの検証と処理に対する柔軟性と制御が向上します。
以上がGo で JSON Null フィールドと欠落フィールドを区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。