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
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
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?