我目前正在尝试进行一个小型Go项目,但是我有一个要解决的问题。
我目前正在使用github.com/jinzhu/gorm
来处理GraphQL服务器后端的数据库操作,并且我希望能够将数据库连接存储在整个项目(包括子包)可访问的全局变量中)。
我的第一个尝试是通过在我的db
文件中执行以下操作来创建名为main.go
的变量:
var db *gorm.DB
var err error
然后在init()
函数内部:
func init() {
db, err = gorm.Open("postgres", "credential stuff here")
db.AutoMigrate(&modelStructHere)
defer db.Close()
}
没有任何崩溃,但是由于作用域,我假设db
变量仅在main.go
内部可用,但我还需要能够在{{1}内部使用},即我的GraphQL解析器当前所在的位置。
也许我应该将这段代码(数据库初始化)移动到实际的解析器文件中,因为在这种情况之外,数据库操作实际上并没有用,所以也许是问题所在?
谢谢!
答案 0 :(得分:2)
亚历克斯的评论随处可见。创建一个名为“ database”的文件夹,并在其中放置一个名为“ database.go”的文件,其中包含以下内容:
package database
// the imports go here
var DB *gorm.DB
现在,您可以在database.DB
中随便使用它。您不应将错误变量设置为全局变量,而应使用与初始化数据库相同的函数进行处理。初始化函数可以在任何地方,通常您希望在程序的主函数开始时使用它。