Golang 类型断言:为自定义类型实现赋值器和扫描器
在 Go 中使用自定义类型(例如基于字符串的类型)时,可能需要实现 Valuer 和 Scanner 接口来与数据库驱动程序交互。这可以将自定义类型与数据库值进行序列化和反序列化。
在提供的代码中,尝试实现 Role 类型及其关联的 Valuer 和 Scanner 方法。但是,遇到了错误:
cannot convert value.(string) (type string) to type *Role
要纠正此错误,可以按如下方式修改 Scan 方法:
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
此修改可确保从数据库检索到的值是正确分配给角色指针。此外,Value 方法应具有以下签名:
func (r Role) Value() (driver.Value, error) { return string(r), nil }
请注意,此实现不会处理或生成 NULL 值。
通过遵循这些建议,您可以成功实现 Valuer 和适用于您的自定义类型的扫描仪接口,并支持与数据库驱动程序的无缝交互。
以上是如何在Go中正确实现自定义类型的Valuer和Scanner?的详细内容。更多信息请关注PHP中文网其他相关文章!