Где следует сохранить объект *sqlx.DB для приложения кобра?
У меня есть проект кобры, который обращается к базе данных, используя sqlx
пакет, и команда имеет подкоманды. Код, связанный с коброй, находится в cmd
папка / подпакет и связанный с БД код находится в db
Папка / подпакет.
Я хотел бы иметь пакет БД, чтобы иметь фабричную функцию
func NewDB() *sqlx.DB
который называется где-то из cmd
пакет. Но я не уверен, где это назвать и как сделать его доступным для всех подкоманд.
Одна идея состоит в том, чтобы иметь глобальную переменную в cmd
пакет и инициализировать его либо в root.go
"s init()
или же rootCmd
"s PersistentPreRun
, В этом случае плохо использовать глобальную переменную?
Если я не использую глобальную переменную, одной из возможностей является вызов подкоманд db.NewDB()
, Как-то так тоже не очень приятно.
Мне приятнее звонить db.NewDB()
однажды в cmd
пакет, вероятно, в root.go
, Но где мне сохранить дескриптор БД, чтобы его могли использовать подкоманды?