在GORM 中,對可能為NULL 的欄位使用sql.NullString 會面臨錯誤:
cannot use "a string goes here", (type string) as type sql.NullString in field value
嘗試執行簡單的GORM 驗證範例時。
sql.NullString 不是字串類型,而是定義為的結構類型:
type NullString struct { String string Valid bool // Valid is true if String is not NULL }
要正確初始化,請使用以下語法:
db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", Something: sql.NullString{String: "a string goes here", Valid: true}, Holyday: false, })
或者,保留更簡單的初始化語法:
定義自訂可為空字串類型:
type MyString string
覆蓋Value() 和Scan() 方法如下:
func (s MyString) Value() (driver.Value, error) { if s == MyStringNull { return nil, nil } return []byte(s), nil } func (s *MyString) Scan(src interface{}) error { switch v := src.(type) { case string: *s = MyString(v) case []byte: *s = MyString(v) case nil: *s = MyStringNull } return nil }
將Something 欄位宣告為MyString 並按預期初始化它:
db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", // Here, an untyped string constant will explicitly convert to MyString because they have the same underlying type. Something: "a string goes here", Holyday: false, })
以上是如何使用 GORM 和 sql.NullString 處理可為 Null 的字串欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!