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