golang 和 sqlite3 时间类型如何自动转换

发布于 2022-09-11 17:33:34 字数 522 浏览 16 评论 0

golang time.Time 类型和 sqlite3 text 类型或者 integer 类型不能在调用 Scan() 方法时自动转换么?

如果不能,存储时间类型字段最佳实践是什么,是不是不可避免出现中间字段或者需要做手动转换?

我在使用过程中出现如下错误:

sql: Scan error on column index 5, name \"create_time\": unsupported Scan, storing driver.Value type []uint8 into type *time.Time

数据驱动库使用 github.com/mattn/go-sqlite3, 其中 golang 字段类型为 time.Time, sqlite3 中字段类型定义为 textinteger 都试过了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒浓于脸红 2022-09-18 17:33:34

https://godoc.org/github.com/...

Go的time.Time对应sqlite的timestamp/datetime,建议在sqlite中用timestamp/datetime存储时间数据

如果还是要用text的话,那就用Go的String来读取,然后再用标准库做转换来获取time.Time类型:

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "Jan 2, 2006 at 3:04pm (MST)"
    t, _ := time.Parse(longForm, "Feb 3, 2013 at 7:54pm (PST)")
    fmt.Println(t)

    const shortForm = "2006-Jan-02"
    t, _ = time.Parse(shortForm, "2013-Feb-03")
    fmt.Println(t)

    t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
    fmt.Println(t)
    
    t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05+07:00")
    fmt.Println(t)
}

需要再详尽一点的话就看官方文档吧:https://golang.org/pkg/time/#...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文