Goroutine 在每次请求 (sqlx) 和 ticker 后打开一个新的数据库连接

Goroutine opening a new connection to database after each request (sqlx) and ticker

让我们考虑以下 goroutine:

func main(){
    ...
    go dbGoRoutine()
    ...
}

还有函数:

func dbGoRoutine() {
    db, err := sqlx.Connect("postgres", GetPSQLInfo())
    if err != nil {
        panic(err)
    }
    defer db.Close()

    ticker := time.NewTicker(10 * time.Second)
    for _ = range ticker.C {
        _, err := db.Queryx("SELECT * FROM table")
        if err != nil {
            // handle
        }
    }
}

函数每次迭代代码时都会打开一个 cloudSQL 连接

[service... cloudsql-proxy] 2019/11/08 17:05:05 New connection for "location:exemple-db"

我不明白为什么它每次都打开一个新连接,因为 sqlx.Connect 不在 for 循环中。

这个问题是由于 sql 包中的 Query 函数,它 returns 行是:

Rows is the result of a query. Its cursor starts before the first row of the result set.

这些游标是使用缓存存储的。

尝试使用 Exec().