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 Я не знаю, какой пакет вы сейчас используете, так что это всего лишь пример.

Вы также можете найти более элегантный способ решения этой проблемы в этом ответе,

Другие вопросы по тегам