Golang 中的 MySQL 时间解析
在 Golang 中,从 MySQL 获取时间数据可能会带来挑战,如错误“不支持的驱动程序”所示-> 使用以下代码片段时扫描对:[]uint8 -> *time.Time":
var my_time time.Time rows, err := db.Query("SELECT current_time FROM table") err := rows.Scan(&my_time)
要解决此问题,请考虑使用 go-sql-driver/mysql 驱动程序,它提供了自动将 DATE 和 DATETIME 数据类型转换为 time.Time 的选项。这可以通过在连接字符串中添加 parseTime=true 来实现,如下所示:
db, err := sql.Open("mysql", "root:@/?parseTime=true")
但是,如果您特别需要 current_time (而不是 current_timestamp),则需要手动解析时间数据。以下是实现此目的的两种方法:
自定义时间解析类型
创建自定义类型 rawTime,它封装 []byte 切片并提供 Time()时间解析方法:
type rawTime []byte func (t rawTime) Time() (time.Time, error) { return time.Parse("15:04:05", string(t)) }
在扫码中使用rawTime自动解析current_time:
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())
手动时间解析
您可以手动解析时间数据,而不是依赖自定义类型:
var myTime string rows, err := db.Query("SELECT current_time()") if rows.Next() { if err = rows.Scan(&myTime); err != nil { panic(err) } } parsedTime, err := time.Parse("15:04:05", myTime) if err != nil { panic(err) } fmt.Println(parsedTime)
以上是如何在Golang中解析MySQL时间数据?的详细内容。更多信息请关注PHP中文网其他相关文章!