登录
首页 >  Golang >  Go问答

go with sqlx NamedQuery 时间戳适用于日期,但不适用于日期时间。命名查询与查询

来源:stackoverflow

时间:2024-04-10 10:27:35 408浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《go with sqlx NamedQuery 时间戳适用于日期,但不适用于日期时间。命名查询与查询》,聊聊,我们一起来看看吧!

问题内容

rows, err := db.namedquery(`select ts from test_table where ts > '1999-01-08 04:05:06';`, map[string]interface{}{})

上面的代码给了我以下错误:

unexpected `:` while reading named param at 74
panic: runtime error: invalid memory address or nil pointer dereference

这很奇怪,如以下代码片段所示,

rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > '1999-01-08';`, map[string]interface{}{})

运行没有错误。 两者之间的区别在于增加了输入时间。

我求助于使用 db.query 而不是 sqlx 方法 db.namedquery 来解决我的问题。

我现在发现我应该将输入作为参数传递给 namedquery。 通常如何编写这样的查询?为什么要使用 namedquery 而不是 query?


正确答案


为什么要使用 namedquery 而不是 query?

使用命名参数的查询更容易让人解析。

通常如何编写这样的查询

layout := "2006-01-02 15:04:05"
ts, err := time.Parse(layout, "1999-01-08 04:05:06")
if err != nil {
    return err
}

arg := map[string]interface{}{"ts": ts}
rows, err := db.NamedQuery(`SELECT ts FROM test_table WHERE ts > :ts`, arg)
if err != nil {
    return err
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>