全局变量和 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 函数的开头。
我目前正在尝试做一个小的 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 函数的开头。