无法使用字符串类型作为 sql.NullString
创建 GORM 模型时,如果尝试使用需要可为空的字段的字符串类型。当对可空字段使用 sql.NullString 时会出现此问题。
问题:
您收到的错误,“不能使用“字符串在此处”,( type string) as type sql.NullString in field value”,表示您尝试将字符串直接分配给 sql.NullString 字段。但是,sql.NullString 不是字符串类型,而是旨在表示可为空字符串的结构类型。
解决方案:
要解决此问题,您需要初始化sql.NullString 字段正确。它应该初始化为:
<code class="go">db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", Something: sql.NullString{String: "a string goes here", Valid: true}, Holyday: false, })</code>
替代解决方案:
如果您更喜欢对可为空字符串使用简化语法,您可以通过以下方式创建自己的可为空字符串类型实现 sql.Scanner 和 driver.Valuer 接口,并利用空字节来表示 NULL value.
<code class="go">type MyString string const MyStringNull MyString = "\x00" // implements driver.Valuer, will be invoked automatically when written to the db func (s MyString) Value() (driver.Value, error) { if s == MyStringNull { return nil, nil } return []byte(s), nil } // implements sql.Scanner, will be invoked automatically when read from the db 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 }</code>
使用此类型,您可以按如下方式初始化 Something 字段:
<code class="go">db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", Something: "a string goes here", Holyday: false, })</code>
以上是如何处理 GORM 模型中的可为空字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!