Golang/gin:如何将 db 传递给路由器功能
Posted
技术标签:
【中文标题】Golang/gin:如何将 db 传递给路由器功能【英文标题】:Golang/gin: How to Pass db to router functions 【发布时间】:2017-06-04 09:33:37 【问题描述】:我正在使用 gin 框架。我正在像这样在主函数中打开 sqlite 数据库
func main()
...
db, err := sql.Open("sqlite3", "./libreread.db")
CheckError(err)
defer db.Close()
...
我在主函数中有这些路由器处理程序。
...
r.GET("/", GetHomePage)
r.GET("/signin", GetSignIn)
r.POST("/signin", PostSignIn)
...
如何通过路由器处理程序 func PostSignin(c *gin.Context)
传递该 db 值?
这样我就可以避免每次在函数中打开和关闭数据库。
更新:我正在使用 go-sqlite3 包。
谢谢!
【问题讨论】:
你试过我的解决方案了吗? 【参考方案1】:假设你在db
中初始化了你的sql客户端,那么你可以将它传递给不同的路由
r.GET("/", GetHomePageHandler(&db))
在你的 GetHomePageHandler 中:
func GetHomePageHandler(sqldb *SQLiteConn) func (*gin.Context)
return func (*gin.Context)
. . .
*SQLiteConn
是您的 sql 数据库实例的类型。我不知道您当前使用的是哪个包,所以这只是一个示例。
您还可以找到更优雅的解决方法in this answer,
【讨论】:
我已经更新了问题。我正在使用 go-sqlite3。当我通过 &db 时,它告诉(未定义:GetHomePage,未定义:*SQLITE.DB)。我不确定我应该提到哪个实例。您能否根据此更新您的答案?谢谢! 我没用过。导入"reflect"
后用fmt.Println(reflect.TypeOf(db))
检查db
的类型,然后将*SQLite.DB
更改为正确的返回类型。快速查看库可能是sqldb *SQLiteConn
或sqldb *SQLiteContext
。以上是关于Golang/gin:如何将 db 传递给路由器功能的主要内容,如果未能解决你的问题,请参考以下文章