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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 07:16:17570ブラウズ

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。