我已经创建了一个基于字符串的角色类型,现在我想通过实现Valuer和Scanner接口使其与数据库驱动程序一起使用
type Role string func (r *Role) Scan(value interface{}) error { r = (*Role)(value.(string)) return nil } func (r *Role) Value(value driver.Value, err error) { if err != nil { value = string(r) } }
我不断收到错误:
The Go code app/entities/user.go does not compile: cannot convert value.(string) (type string) to type *Role
我在这里做错了什么?
这是第一个功能的工作代码:
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
尽管您可能希望使用s, ok := value.(string)并返回一个错误来!ok代替恐慌。
s, ok := value.(string)
!ok
a的签名driver.Valuer不是您给的,而是:
driver.Valuer
func (r Role) Value() (driver.Value, error) { return string(r), nil }
请注意,这不会处理或产生NULL值。
Playground