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

Bagaimana Mengendalikan Nilai SQL NULL dan Perwakilan JSON mereka dengan cekap dalam Go?

Mary-Kate Olsen
Lepaskan: 2025-01-03 06:22:39
asal
254 orang telah melayarinya

How to Efficiently Handle SQL NULL Values and Their JSON Representation in Go?

Bekerja dengan SQL NULL Values ​​dan JSON dengan Cara yang Cekap

Dalam artikel ini, kami menangani dilema bekerja dengan nilai SQL NULL dalam Go dan cara mengendalikannya Perwakilan JSON dengan berkesan.

Apabila menggunakan jenis Go seperti int64 dan rentetan, nilai nol tidak boleh disimpan terus. Walau bagaimanapun, kita boleh menggunakan sql.NullInt64 dan sql.NullString untuk tujuan ini. Walau bagaimanapun, apabila jenis ini dibenamkan dalam struct dan ditukar kepada JSON menggunakan pakej json, format yang terhasil menyimpang daripada yang diperoleh apabila menggunakan int64 biasa dan jenis rentetan.

Perbezaan ini timbul kerana perwakilan JSON bagi Jenis sql.Null*** termasuk tahap tambahan kerana jenis ini pada dasarnya adalah struct sendiri. Akibatnya, timbul keperluan untuk penyelesaian untuk mencapai format JSON yang diingini.

Daripada meninggalkan penggunaan nilai NULL dalam pangkalan data SQL, satu penyelesaian yang berdaya maju ialah mencipta jenis tersuai yang melaksanakan json. Antara muka Marshaller dan json.Unmarshaler. Dengan membenamkan jenis sql.NullInt64, kami mengekalkan kaedah SQL sambil mendapat kawalan ke atas pengendalian JSON. Berikut ialah contoh yang menunjukkan pendekatan ini:

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

Dengan menggunakan jenis tersuai ini menggantikan sql.NullInt64, perwakilan JSON sejajar dengan format yang dikehendaki.

Untuk menunjukkan penyelesaian ini, anda boleh jalankan kod berikut di taman permainan Go:

func main() {
    type Person struct {
        Age     int64                `json:"age"`
        AgeJson JsonNullInt64        `json:"ageJson"`
    }
    p := Person{
        Age:     10,
        AgeJson: sql.NullInt64{Int64: 0, Valid: true},
    }
    b, _ := json.Marshal(p)
    fmt.Println(string(b))
}
Salin selepas log masuk

Output akan menyerupai berikut:

{"age":10,"ageJson":10}
Salin selepas log masuk

Pendekatan ini membolehkan pengendalian nilai NULL yang lancar dalam kedua-dua SQL dan JSON, mengekalkan ketekalan dalam perwakilan data.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai SQL NULL dan Perwakilan JSON mereka dengan cekap dalam 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan