I have a cobra project which accesses database using sqlx
package, and the command has sub-commands. The cobra related code is in the cmd
folder/subpackage and the DB related code is in the db
folder/subpackage.
I would like to have package db to have a factory function
func NewDB() *sqlx.DB
which is called somewhere from the cmd
package. But I am not sure where to call it and how to make it available to all sub-commands.
One idea is to have a global variable in the cmd
package, and initialize it either in root.go
's init()
or rootCmd
's PersistentPreRun
. Is it bad to use global variable in this case?
If I don't use global variable,
one possibility is to have the sub-commands call db.NewDB()
. Somehow it doesn't feel very nice this way either.
I find it nicer to call db.NewDB()
once in cmd
package, probably in root.go
. But where should I save the DB handle such that sub-commands can use it?