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

go with sqlx NamedQuery timestamp works with date but not with datetime. NamedQuery vs Query

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?

why would you use NamedQuery rather than Query?

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

How does one typically write such a 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
}