Go での SQL NULL 値と JSON の操作
Go で null 許容値を操作する場合は、sql.NullInt64 のような型を使用するのが一般的です。そしてsql.NullString。ただし、これらの型を含む構造体から JSON を生成すると、予期しない結果が生じる可能性があります。具体的には、sql.Null*** も構造体であるため、JSON 出力には追加のレベルが含まれる可能性があります。
回避策
この問題に対処するには、次のような回避策があります。 json.Marshaller インターフェイスと json.Unmarshaler インターフェイスを実装するカスタム タイプを作成します。 sql.NullInt64 型を埋め込むことで、独自の JSON マーシャリングおよびアンマーシャリング動作を定義しながら SQL メソッドをシームレスに処理できます。
例を次に示します。
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 will let us detect null 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 の場合、JSON 出力は追加の要素を除いて、期待する形式になります。 level.
例
この例は次のリンクでテストできます:
http://play.golang.org/p/zFESxLcd -c
以上がGo で SQL NULL 値と JSON を効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。