使用Go 在SQL 中處理JSON 和NULL 值
在SQL 資料庫中處理NULL 值可能是一個挑戰,尤其是在使用JSON 時。在 Go 中,Int64 和 String 等類型本身並不支援 NULL 值,因此需要 sql.NullInt64 和 sql.NullString 等包裝類型。
但是,當這些包裝類型在結構體和JSON 中使用時使用json 包生成,由於包裝器的結構引入了額外的嵌套,生成的JSON 格式與預期有所不同nature.
解決問題
要解決此問題,一種可行的解決方案是創建遵循json.Marshaller 和json.Unmarshaler 介面的自訂類型。透過嵌入 sql.NullInt64 類型,保留了 SQL 方法的優點,同時自訂 JSON 處理。以下是範例:
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 }
透過使用自訂 JsonNullInt64 類型取代 sql.NullInt64,JSON 編碼符合預期。
以上是如何使用 Go 有效處理 JSON 和 SQL 中的 NULL 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!