Go を使用した SQL の JSON 値と NULL 値
SQL データベースでの NULL 値の処理は、特に JSON を使用する場合に困難になることがあります。 Go では、Int64 や String などの型は本質的に NULL 値をサポートしていないため、sql.NullInt64 や sql.NullString などのラッパー型が必要になります。
ただし、これらのラッパー型が構造体や JSON 内で使用される場合は、 json パッケージを使用して生成された場合、ラッパーによって導入された追加のネストにより、結果の JSON 形式が予期されたものから逸脱します。 struct Nature.
問題への対処
この問題を克服するための実行可能な解決策の 1 つは、json.Marshaller インターフェイスと json.Unmarshaler インターフェイスに準拠するカスタム型を作成することです。 。 sql.NullInt64 型を埋め込むことで、SQL メソッドの利点を維持しながら、同時に JSON 処理をカスタマイズできます。以下に例を示します。
type JsonNullInt64 struct { sql.NullInt64 } func (v JsonNullInt64) MarshalJSON() ([]byte, error) { if v.Valid { return json.Marshal(v.Int64) } else { return json.Marshal(nil) } } func (v *JsonNullInt64) UnmarshalJSON(data []byte) error { // Unmarshalling into a pointer detects null values var x *int64 if err := json.Unmarshal(data, &x); err != nil { return err } if x != nil { v.Valid = true v.Int64 = *x } else { v.Valid = false } return nil }
sql.NullInt64 の代わりにカスタム JsonNullInt64 型を使用することにより、JSON エンコードは期待どおりになります。
以上がGo で JSON と SQL の NULL 値を効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。