Где следует сохранить объект * sqlx.DB для приложения кобра? - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть проект кобры, который обращается к базе данных, используя пакет sqlx, и команда имеет подкоманды.Код, связанный с коброй, находится в папке / подпакете cmd, а код, связанный с БД, - в папке / подпакете db.

Я бы хотел, чтобы пакет db имел фабричную функцию

func NewDB() *sqlx.DB

, который вызывается где-то из пакета cmd.Но я не уверен, куда его вызывать и как сделать его доступным для всех подкоманд.

Одна из идей - иметь глобальную переменную в пакете cmd и инициализировать ее либо в root.goinit() или rootCmd PersistentPreRun.Разве плохо в этом случае использовать глобальную переменную?

Если я не использую глобальную переменную, одна из возможностей состоит в том, чтобы подкоманды вызывали db.NewDB().Почему-то это тоже не очень приятно.

Я считаю, что лучше назвать db.NewDB() один раз в пакете cmd, возможно, в root.go.Но где мне сохранить дескриптор БД, чтобы его могли использовать подкоманды?

...