ホームページ > バックエンド開発 > Golang > Go で JSON と SQL の NULL 値を効果的に処理するにはどうすればよいですか?

Go で JSON と SQL の NULL 値を効果的に処理するにはどうすればよいですか?

DDD
リリース: 2024-12-31 01:52:09
オリジナル
225 人が閲覧しました

How to Handle NULL Values in JSON and SQL Effectively with Go?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート