Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Nilai NULL dalam JSON dan SQL dengan Berkesan dengan Go?

Bagaimana Mengendalikan Nilai NULL dalam JSON dan SQL dengan Berkesan dengan Go?

DDD
Lepaskan: 2024-12-31 01:52:09
asal
225 orang telah melayarinya

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

Nilai JSON dan NULL dalam SQL dengan Go

Mengendalikan nilai NULL dalam pangkalan data SQL boleh menjadi satu cabaran, terutamanya apabila bekerja dengan JSON. Dalam Go, jenis seperti Int64 dan String tidak menyokong nilai NULL secara semula jadi, menimbulkan keperluan untuk jenis pembalut seperti sql.NullInt64 dan sql.NullString.

Walau bagaimanapun, apabila jenis pembalut ini digunakan dalam struct dan JSON dijana menggunakan pakej json, format JSON yang terhasil menyimpang daripada apa yang dijangkakan disebabkan oleh sarang tambahan yang diperkenalkan oleh sifat struktur pembungkus.

Mengatasi Isu

Untuk mengatasi isu ini, satu penyelesaian yang berdaya maju ialah penciptaan jenis tersuai yang mematuhi json.Marshaller dan json. Antara muka Unmarshaler. Dengan membenamkan jenis sql.NullInt64, faedah kaedah SQL dikekalkan sambil menyesuaikan pengendalian JSON secara serentak. Berikut ialah contoh:

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
}
Salin selepas log masuk

Dengan menggunakan jenis JsonNullInt64 tersuai sebagai ganti sql.NullInt64, pengekodan JSON sejajar dengan jangkaan.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai NULL dalam JSON dan SQL dengan Berkesan dengan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan