首页  >  文章  >  后端开发  >  如何解决 Go 中从 MySQL 解析时间时出现'不支持的驱动程序 -> 扫描对:[]uint8 -> *time.Time”错误?

如何解决 Go 中从 MySQL 解析时间时出现'不支持的驱动程序 -> 扫描对:[]uint8 -> *time.Time”错误?

Barbara Streisand
Barbara Streisand原创
2024-11-10 14:52:02360浏览

How to Solve 扫描对:[]uint8 -> *time.Time" 在 Go 中解析 MySQL 时间时出错? " /> 扫描对:[]uint8 -> *time.Time" 在 Go 中解析 MySQL 时间时出错? " />

如何在 Go 中处理数据库时间解析

从 MySQL 数据库检索时间值时遇到错误可能会令人沮丧。本文解决了特定错误“不支持的驱动程序 ->”扫描对:[]uint8 -> *time.Time”,并提供了使用流行的 go-sql-driver/mysql 库的解决方案。

解决方案:启用自动解析

go-sql-driver/mysql 提供了对自动解析的支持将 DATE 和 DATETIME 列转换为 time.Time 值。要启用此功能,请将参数“parseTime=true”附加到连接字符串中,启用后,像 SELECT current_timestamp() 这样的查询将自动进行。映射到所需的时间格式。

针对特定情况的自定义解析

对于自动解析不适合或不可用的情况(例如,检索 current_time()),需要自定义解析。

第 1 步:创建自定义Type

定义一个包装原始字节切片([]byte)的自定义类型,并实现 Time() 方法以将时间值解析为 time.Time,例如:

type rawTime []byte

func (t rawTime) Time() (time.Time, error) {
    return time.Parse("15:04:05", string(t))
}

第 2 步:在扫描中使用自定义类型

在您的扫描代码中,将直接引用替换为time.Time 使用您的自定义类型:

var myTime rawTime
rows, err = db.Query("SELECT current_time()")
if err = rows.Scan(&myTime); err != nil {
    // Handle error
}

第 3 步:将原始时间转换为解析时间

最后,在您的自定义类型上调用 Time() 来检索解析的时间值:

以上是如何解决 Go 中从 MySQL 解析时间时出现'不支持的驱动程序 -> 扫描对:[]uint8 -> *time.Time”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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