Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Nilai SQL NULL dalam JSON menggunakan Penukaran Jenis Go?
JSON Pengendalian Nilai NULL SQL dengan Penukaran Jenis Go
Sementara jenis Go seperti Int64 dan String tidak boleh menyimpan nilai nol, menggunakan sql.NullInt64 dan sql.NullString membenarkan keupayaan ini. Walau bagaimanapun, pengekodan jenis ini sebagai JSON menggunakan pakej json menghasilkan format yang diubah berbanding jenis Int64 dan String biasa.
Percanggahan ini timbul kerana jenis sql.Null* adalah struct sendiri, menyebabkan tahap tambahan bersarang dalam perwakilan JSON. Untuk mengatasinya, seseorang boleh melaksanakan jenis tersuai yang mematuhi antara muka json.Marshaller dan json.Unmarshaler.
Sebagai contoh, jenis JsonNullInt64 boleh ditakrifkan, membenamkan jenis sql.NullInt64 dan melaksanakan pengendalian JSON tersuai:
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 { // Pointer unmarshalling ensures NULL detection 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 }
Menggantikan sql.NullInt64 dengan JsonNullInt64 menghasilkan pengekodan JSON yang dikehendaki. Untuk ujian lanjut, rujuk taman permainan ini: http://play.golang.org/p/zFESxLcd-c
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Nilai SQL NULL dalam JSON menggunakan Penukaran Jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!