0

所以我要做的是在有http请求时尝试打开数据库连接,然后再次关闭。我正在使用 pgx 和 gin 包,所以这就是我所做的:

func handleGetUsers(c *gin.Context) {
connectDB()
data, err := allUsers()
if err != nil {
    log.Println(err)
    return
}

results := struct {
    Count int    `json:"count"`
    Data  []User `json:"data"`
}{
    Count: len(data),
    Data:  data,
}

c.JSON(200, results)
defer connectDB()

}

但是如果我试图发出另一个相同的 http 请求,数据库连接已经关闭。有什么我能做的,还是我的逻辑错了

4

1 回答 1

1

可能,您的意图几乎没有开销。

每当您查询服务器的 url 时,Webserver 都会执行 Go 函数。如果这意味着执行 sql 请求 - 它将被执行并关闭连接。网络服务器返回结果,您的服务器和客户端之间的通信结束。

我可以建议,因为我相信你想提高你的 gin-gonic 性能是在 Gin 中使用并发 DB 查询执行。

    messages := make(chan string)
router.GET("/db_connection",func(c *gin.Context){

    c.Copy()

    go func(
        connectDB()
    <-messages
    ){}()

    data, err := allUsers()
    if err != nil {
        log.Println(err)
        return
    }

    results := struct {
        Count int    `json:"count"`
        Data  []User `json:"data"`
    }{
        Count: len(data),
        Data:  data,
    }

    c.JSON(200, results)
    go func(
        connectDB()
    <-messages
    ){}()




})
于 2020-04-28T20:37:26.870 回答