go - 插入自定义时间,实现了 Scanner 和 Valuer——但仍然出错

标签 go go-gorm

我有一个自定义时间格式,它是一些自定义解码的结果:

type customTime struct {
    time.Time
}

我已经在这个 customTime 上实现了 ScannerValuer 接口(interface),如下所示:

func (ct *customTime) Scan(value interface{}) error {
    ct.Time = value.(time.Time)
    return nil
}

func (ct *customTime) Value() (driver.Value, error) {
    return ct.Time, nil
}

但是当我尝试插入时它仍然出错:

sql: converting Exec argument $3 type: unsupported type main.customTime, a struct

我错过了什么?

最佳答案

找到解决方案,ScannerValuer 应该在实际值上实现,而不是指向 customTime 的指针

func (ct customTime) Scan(value interface{}) error {
    ct.Time = value.(time.Time)
    return nil
}

func (ct customTime) Value() (driver.Value, error) {
    return ct.Time, nil
}

关于go - 插入自定义时间,实现了 Scanner 和 Valuer——但仍然出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638610/

相关文章:

amazon-web-services - 如何使用 golang sdk 将 docker 镜像推送到 aws ecr

go - 使用go.mod在目录中将软件包安装到GOPATH

sockets - 如何监听 ICMP 数据包?

gorm如何外国 self

go - 如何用 gorm 填充和嵌入数组?

go - 为 slice string[] 添加自定义方法

api - Web api 将名称和密码设置为 request.BasicAuth

go - 如何在连接关闭时终止正在运行的查询

sql-server - GORM GOLANG/Go msSQL UNIQUEIDENTIFIER 内部结构

database - 在 go http 的自定义处理程序中传递 *gorm.db 实例的最佳实践