Лучшая практика для передачи экземпляра * gorm.db в пользовательский обработчик в go http - PullRequest
0 голосов
/ 26 ноября 2018

Я создаю собственный веб-обработчик для обработки моих маршрутов в веб-приложении.

Обработчик:

type CustomHandler struct{
Db *gorm.DB
}

Затем функция получателя:

func (h CustomHandler) Index() http.Handler {
   return http.handlerFunc(w http.ResponseWriter,r *http.Request){
   //Some code
   //use h.Db.Find() ,etc.
})

Я передаю это на мой маршрутизатор как

//In package 
customHandler := &CustomHandler{*gormInstance} //I've already got the instance
router.Handle("/someroute", customHandler.index() )

Но проблема с этим связана с экземпляром gorm.DB, так как указатель будет видоизменяться после прохождения маршрута во время одного запроса.Нужно ли создавать разные копии исходного экземпляра gorm?Если это так, как я могу пройти их через каждый маршрут для каждого запроса?

1 Ответ

0 голосов
/ 26 ноября 2018

Согласно документации Gorm:

Все методы цепочки клонируют и создают новый объект БД (совместно использует один пул соединений), GORM безопасен для одновременного использования несколькими программами.

Горм создает клонов, когда это необходимо автоматически, нет необходимости обрабатывать это вручную.Для получения дополнительной информации проверьте эту страницу в документации: http://gorm.io/docs/method_chaining.html

...