首页  >  文章  >  后端开发  >  如何在Go中正确实现自定义类型的Valuer和Scanner?

如何在Go中正确实现自定义类型的Valuer和Scanner?

DDD
DDD原创
2024-11-06 08:04:02549浏览

How to Correctly Implement Valuer and Scanner for Custom Types in Go?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn