眼镜蛇应用程序应将* sqlx.DB对象保存在哪里?

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?