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 }
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!