我有一个使用包访问数据库的眼镜蛇项目sqlx
,该命令具有子命令。cobra 相关代码在cmd
文件夹/子包中,DB 相关代码在db
文件夹/子包中。
我想有包 db 有一个工厂功能
func NewDB() *sqlx.DB
从cmd
包的某个地方调用。但我不确定在哪里调用它以及如何使其可用于所有子命令。
一种想法是在包中有一个全局变量,并在's或'scmd
中对其进行初始化。在这种情况下使用全局变量是否不好?root.go
init()
rootCmd
PersistentPreRun
如果我不使用全局变量,一种可能性是让子命令调用db.NewDB()
. 不知何故,这种方式也感觉不太好。
db.NewDB()
我发现在包中调用一次更好cmd
,可能在root.go
. 但是我应该在哪里保存数据库句柄以便子命令可以使用它?