在Go 中使用SQL NULL 值和JSON
在Go 中使用可空值時,通常會使用sql.NullInt64 等型別和sql.NullString。但是,當從包含它們的結構產生 JSON 時,這些類型可能會導致意外結果。具體來說,JSON 輸出可能包含額外的級別,因為 sql.Null*** 也是一個結構體。
解決方法
要解決此問題,一種解決方法是建立一個實作 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 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 }
當使用此自訂類型而不是sql.NullInt64,JSON輸出將採用您期望的格式,無需額外的
範例
您可以透過以下連結測試此範例:
http://play .golang.org/p/zFESxLcd -c
以上是如何在 Go 中有效處理 SQL NULL 值和 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!