在 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中文网其他相关文章!