struct 與資料庫NULL欄位

資料庫設定中,常常會設定允許NULL值使用,但NULL在程式語言是一種獨特的資料型態,因此,在使用上必須要特別注意。
import (
   "database/sql"
)
type ABC struct {
    fieldA  sql.NullString   `json:"fielda"`
    fieldB  sql.NullInt64    `json:"fieldb"`
}

struct常見轉換方式

通常會使用 DB->特定struct(包含 sql.Nullxxx 型態)->map[string]string的模式來轉換查詢出來的結果。
  • 轉換出來資料架構如下:
main.Article{
   Id:2, 
   Title:"first article", 
   PubDate:mysql.NullTime{Time:time.Time{sec:0, nsec:0, loc:(*time.Location)(nil)}, Valid:false}, 
   Body:sql.NullString{String:"", Valid:false}, 
   User:sql.NullInt64{Int64:0, Valid:false}
}
如果要判斷是否有值,可以使用:
if a.PubDate.Valid:
    // handle a.PubDate.Time
else:
    // handle nil

參考資料