为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红颜莎娜 2022-05-23 17:10:19
所以我要做的是在有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 请求,数据库连接已经关闭。有什么我能做的,还是我的逻辑错了
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


每当您查询服务器的 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

    ){}()





})


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信