猿问

仅当golang中有请求时如何打开数据库连接

所以我要做的是在有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 请求,数据库连接已经关闭。有什么我能做的,还是我的逻辑错了


红颜莎娜
浏览 100回答 1
1回答

慕码人8056858

可能,您的意图几乎没有开销。每当您查询服务器的 url 时,Webserver 都会执行 Go 函数。如果这意味着执行 sql 请求 - 它将被执行并关闭连接。网络服务器返回结果,您的服务器和客户端之间的通信结束。我可以建议,因为我相信你想提高你的 gin-gonic 性能是在 Gin 中使用并发 DB 查询执行。&nbsp; &nbsp; messages := make(chan string)router.GET("/db_connection",func(c *gin.Context){&nbsp; &nbsp; c.Copy()&nbsp; &nbsp; go func(&nbsp; &nbsp; &nbsp; &nbsp; connectDB()&nbsp; &nbsp; <-messages&nbsp; &nbsp; ){}()&nbsp; &nbsp; data, err := allUsers()&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Println(err)&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; results := struct {&nbsp; &nbsp; &nbsp; &nbsp; Count int&nbsp; &nbsp; `json:"count"`&nbsp; &nbsp; &nbsp; &nbsp; Data&nbsp; []User `json:"data"`&nbsp; &nbsp; }{&nbsp; &nbsp; &nbsp; &nbsp; Count: len(data),&nbsp; &nbsp; &nbsp; &nbsp; Data:&nbsp; data,&nbsp; &nbsp; }&nbsp; &nbsp; c.JSON(200, results)&nbsp; &nbsp; go func(&nbsp; &nbsp; &nbsp; &nbsp; connectDB()&nbsp; &nbsp; <-messages&nbsp; &nbsp; ){}()})
随时随地看视频慕课网APP

相关分类

Go
我要回答