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

时间:2019-02-03 04:28:50

标签: go sqlx go-cobra

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

我想让db包具有工厂功能

func NewDB() *sqlx.DB

,它是从cmd包中调用的。但是我不确定在哪里调用它以及如何使它可用于所有子命令。

一个想法是在cmd包中包含一个全局变量,并在root.go的{​​{1}}或init()的{​​{1}}中对其进行初始化。在这种情况下使用全局变量是否不好?

如果我不使用全局变量, 一种可能是让子命令调用rootCmd。这种方式也不是很舒服。

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

0 个答案:

没有答案