1

我有一个使用包访问数据库的眼镜蛇项目sqlx,该命令具有子命令。cobra 相关代码在cmd文件夹/子包中,DB 相关代码在db文件夹/子包中。

我想有包 db 有一个工厂功能

func NewDB() *sqlx.DB

cmd包的某个地方调用。但我不确定在哪里调用它以及如何使其可用于所有子命令。

一种想法是在包中有一个全局变量,并在's或'scmd中对其进行初始化。在这种情况下使用全局变量是否不好?root.goinit()rootCmdPersistentPreRun

如果我不使用全局变量,一种可能性是让子命令调用db.NewDB(). 不知何故,这种方式也感觉不太好。

db.NewDB()我发现在包中调用一次更好cmd,可能在root.go. 但是我应该在哪里保存数据库句柄以便子命令可以使用它?

4

0 回答 0