首页 > 后端开发 > Golang > 正文

在 Golang 中从 MySQL 检索时间数据时如何解决'不支持的驱动程序 -> 扫描对:[]uint8 -> *time.Time”错误?

Patricia Arquette
发布: 2024-11-13 08:46:02
原创
527 人浏览过

How to Resolve 扫描对:[]uint8 -> *time.Time" 在 Golang 中从 MySQL 检索时间数据时出错? " /> 扫描对:[]uint8 -> *time.Time" 在 Golang 中从 MySQL 检索时间数据时出错? " />

了解 Golang 中数据库的解析时间错误

尝试使用 Golang 从 MySQL 数据库检索时间数据时,您可能会遇到类似于以下内容的错误:

unsupported driver -> Scan pair: []uint8 -> *time.Time
登录后复制

出现此错误是因为 Go SQL 驱动程序的默认行为不会自动将 MySQL 中的 DATE 或 DATETIME 字段解析为 Go time.Time 类型。

解决方案 1:启用自动解析

要解决此问题,您可以通过在数据库连接字符串中添加 parseTime=true 来启用自动解析。

db, err := sql.Open("mysql", "root:@/?parseTime=true")
登录后复制

使用此设置,驱动程序将自动将 DATE 和 DATETIME 值转换为时间。时间对象。

解决方案 2:自定义解析

如果遇到特定解析要求,可以选择自定义解析:

  • 定义一个封装 []byte 的自定义类型,并包含用于解析的 Time() 方法。

    type rawTime []byte
    
    func (t rawTime) Time() (time.Time, error) {
      return time.Parse("15:04:05", string(t))
    }
    登录后复制
  • 在扫描代码中使用自定义类型来手动解析时间值。

    var myTime rawTime
    rows, err := db.Query("SELECT current_time()")
    
    if rows.Next() {
      if err = rows.Scan(&myTime); err != nil {
          panic(err)
      }
    }
    
    fmt.Println(myTime.Time())
    登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板