gpt4 book ai didi

go - 全局变量和 Go

转载 作者:IT王子 更新时间:2023-10-29 02:01:43 31 4
gpt4 key购买 nike

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

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

提前致谢!

最佳答案

Alex 的评论很到位。创建一个名为“database”的文件夹,并在其中放置一个名为“database.go”的文件,其中包含以下内容:

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

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

关于go - 全局变量和 Go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332043/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com