Golang/ 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)
...
Как передать это значение в БД через функцию-обработчик маршрутизатора PostSignin(c *gin.Context)
?
Так что я мог избежать открытия и закрытия базы данных каждый раз в функциях.
ОБНОВЛЕНИЕ: я использую пакет go-sqlite3.
Спасибо!
1 ответ
Допустим, ваш sql-клиент инициализирован в db
Затем вы можете передать его на разные маршруты с
r.GET("/", GetHomePageHandler(&db))
И в вашем GetHomePageHandler:
func GetHomePageHandler(sqldb *SQLiteConn) func (*gin.Context) {
return func (*gin.Context) {
. . .
}
}
куда *SQLiteConn
тип вашего экземпляра sql db Я не знаю, какой пакет вы сейчас используете, так что это всего лишь пример.
Вы также можете найти более элегантный способ решения этой проблемы в этом ответе,