Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局变量和Go_Go_Graphql_Graphql Go - Fatal编程技术网

全局变量和Go

全局变量和Go,go,graphql,graphql-go,Go,Graphql,Graphql Go,我目前正在尝试一个小型围棋项目,我有一个问题我正在努力解决 我目前正在使用github.com/jinchu/gorm来处理GraphQL服务器后端的数据库操作,并且我希望能够将DB连接存储在整个项目(包括子包)中可访问的全局变量中 我的第一次尝试是通过在我的main.go文件中执行以下操作来创建名为db的变量: var db *gorm.DB var err error 然后在init()函数中: func init() { db, err = gorm.Open("postgres

我目前正在尝试一个小型围棋项目,我有一个问题我正在努力解决

我目前正在使用
github.com/jinchu/gorm
来处理GraphQL服务器后端的数据库操作,并且我希望能够将DB连接存储在整个项目(包括子包)中可访问的全局变量中

我的第一次尝试是通过在我的
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操作实际上没有任何用处,所以这可能就是问题所在


提前谢谢

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

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

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

将其移动到另一个包中,并使其大写
var DB*gorm.DB
。然后你可以在任何地方导入它。您现在这样做的问题是,
gql.go
无法从main导入,因为这将是一个依赖循环。将其移动到另一个非主包将删除该循环。