全局变量和 Go

Global variables and Go

我目前正在尝试做一个小的 Go 项目,我有一个问题要解决。

我目前正在使用 github.com/jinzhu/gorm 来处理 GraphQL 服务器后端的数据库操作,我希望能够将数据库连接存储在整个项目(包括子-包)。

我的第一次尝试是通过在我的 main.go 文件中执行以下操作来创建一个名为 db 的变量:

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 中使用,但我也需要能够在 [=] 中使用它18=],我的 GraphQL 解析器当前所在的位置。

也许我应该将这段代码 (DB init) 移到实际的解析器文件中,因为除此之外,DB 操作真的没有用,所以这可能就是问题所在?

提前致谢!

亚历克斯的评论很到位。创建一个名为 "database" 的文件夹,并在其中放入一个名为 "database.go" 的文件,其中包含以下内容:

package database
// the imports go here
var DB *gorm.DB

现在您可以通过database.DB随时随地使用它。您不应该将错误变量设置为全局变量,而是在初始化数据库的同一函数中处理它。 init 函数可以在任何地方,通常你希望它在你程序的 main 函数的开头。