如何在golang中有请求时才打开数据库连接
How to open db connection only when there's request in 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 请求,数据库连接已经关闭。有什么我可以做的还是我的逻辑毕竟是错误的
可能,您的意图没有什么开销。
只要您查询服务器的 url,网络服务器就会执行 Go 函数。
如果这意味着执行 sql 请求 - 它将被执行并关闭连接。 Web 服务器 returns 结果以及您的服务器和客户端之间的通信结束。
我可以建议,因为我相信你想提高你的 gin-gonic 性能是在 Gin 中使用并发数据库查询执行。
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
){}()
})
所以我要做的是尝试在有 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 请求,数据库连接已经关闭。有什么我可以做的还是我的逻辑毕竟是错误的
可能,您的意图没有什么开销。
只要您查询服务器的 url,网络服务器就会执行 Go 函数。 如果这意味着执行 sql 请求 - 它将被执行并关闭连接。 Web 服务器 returns 结果以及您的服务器和客户端之间的通信结束。
我可以建议,因为我相信你想提高你的 gin-gonic 性能是在 Gin 中使用并发数据库查询执行。
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
){}()
})