全局变量和Go

时间:2018-07-13 19:56:16

标签: go graphql graphql-go

我目前正在尝试进行一个小型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解析器当前所在的位置。

也许我应该将这段代码(数据库初始化)移动到实际的解析器文件中,因为在这种情况之外,数据库操作实际上并没有用,所以也许是问题所在?

谢谢!

1 个答案:

答案 0 :(得分:2)

亚历克斯的评论随处可见。创建一个名为“ database”的文件夹,并在其中放置一个名为“ database.go”的文件,其中包含以下内容:

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

现在,您可以在database.DB中随便使用它。您不应将错误变量设置为全局变量,而应使用与初始化数据库相同的函数进行处理。初始化函数可以在任何地方,通常您希望在程序的主函数开始时使用它。