关于 sqlite:Golang/gin: How to Pass db to router functions

Golang/gin: How to Pass db to router functions

我正在使用 gin 框架。我正在像这样

的主函数中打开sqlite数据库

1
2
3
4
5
6
7
func main() {
...
db, err := sql.Open("sqlite3","./libreread.db")
CheckError(err)
defer db.Close()
...
}

我在主函数中有这些路由器处理程序。

1
2
3
4
5
...
r.GET("/", GetHomePage)
r.GET("/signin", GetSignIn)
r.POST("/signin", PostSignIn)
...

如何通过路由器处理程序 func PostSignin(c *gin.Context) 传递那个 db 值?

这样我就可以避免每次在函数中打开和关闭数据库。

更新:我正在使用 go-sqlite3 包。

谢谢!


假设你在 db 中初始化了你的 sql 客户端,那么你可以通过

将它传递给不同的路由

1
r.GET("/", GetHomePageHandler(&db))

在你的 GetHomePageHandler 中:

1
2
3
4
5
func GetHomePageHandler(sqldb *SQLiteConn) func (*gin.Context) {
    return  func (*gin.Context) {
      . . .
    }
}

其中 *SQLiteConn 是您的 sql 数据库实例的类型。我不知道您当前使用的是哪个软件包,所以这只是一个示例。

您还可以在此答案中找到更优雅的解决方法,