1

我目前正在尝试处理一个小型 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,但我还需要能够在内部使用它gql/gql.go,我的 GraphQL 解析器当前所在的位置。

也许我应该将这段代码(DB init)移动到实际的解析器文件中,因为无论如何除了这样的事情之外,DB 操作真的没有用,所以也许这就是问题所在?

提前致谢!

4

1 回答 1

2

亚历克斯的评论很到位。创建一个名为“database”的文件夹,并在其中放置一个名为“database.go”的文件,其中包含:

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

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

于 2018-07-13T20:33:34.340 回答