Где следует сохранить объект *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, Но где мне сохранить дескриптор БД, чтобы его могли использовать подкоманды?

0 ответов

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