Mysql 全局变量未传递到下一个包

Mysql 全局变量未传递到下一个包,mysql,go,Mysql,Go,因为golang不支持循环依赖,我只是刚刚开始在golang。我的连接变量遇到了一个小问题,我使用gorm驱动程序,MySQL作为我的数据库引擎 我试图将连接变量传递给程序调用的下一个函数,它位于另一个文件中。 AchFactory.go fmt.Println(">Loading Achievements") Start.DB.HasTable("achievements") Start.DB.Select("id", "group_name", "category", "level",

因为golang不支持循环依赖,我只是刚刚开始在golang。我的连接变量遇到了一个小问题,我使用gorm驱动程序,MySQL作为我的数据库引擎

我试图将连接变量传递给程序调用的下一个函数,它位于另一个文件中。 AchFactory.go

fmt.Println(">Loading Achievements")
Start.DB.HasTable("achievements")
Start.DB.Select("id", "group_name", "category", "level", "reward_pixels", "reward_points", "progress_needed", "game_id").Find("achievements")
fmt.Println(">Found Schema")
var DB *gorm.DB

func Initi() {
    fmt.Println("Initating!")
    Connect()
}

func Connect() {
    var err error
    DB, err = gorm.Open("mysql", config.MYSQL_USER+":"+config.MYSQL_PASS+"@/"+config.MYSQL_DB+"?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
        DB.Close()
    }
    fmt.Println(">Connection Succesful")
    fmt.Println(">Test Query Starting")
    TestQ()
}

func TestQ() {
    DB.HasTable("tests")
    fmt.Println(">Query Succesful!")
    AchManager.GetAch()
}
开始。开始

fmt.Println(">Loading Achievements")
Start.DB.HasTable("achievements")
Start.DB.Select("id", "group_name", "category", "level", "reward_pixels", "reward_points", "progress_needed", "game_id").Find("achievements")
fmt.Println(">Found Schema")
var DB *gorm.DB

func Initi() {
    fmt.Println("Initating!")
    Connect()
}

func Connect() {
    var err error
    DB, err = gorm.Open("mysql", config.MYSQL_USER+":"+config.MYSQL_PASS+"@/"+config.MYSQL_DB+"?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
        DB.Close()
    }
    fmt.Println(">Connection Succesful")
    fmt.Println(">Test Query Starting")
    TestQ()
}

func TestQ() {
    DB.HasTable("tests")
    fmt.Println(">Query Succesful!")
    AchManager.GetAch()
}

我只是想知道我做错了什么,这样我就可以在将来防止这个错误。谢谢:)

如果您的
AchFactory.go
文件与您的
Start.go
文件在同一个包中,您不需要在
DB
前面加任何前缀,因为这两个文件位于同一个包中,它们都共享在包级别定义的变量

例如:

.
└── foo
    ├── AchFactory.go
    └── Start.go
.
├── foo
│   └── Start.go
└── bar
    └── AchFactory.go
开始,开始

去吧


另一方面,如果
AchFactory.go
Start.go
位于不同的包中,则
AchFactory.go
文件需要导入包含
Start.go
文件的包,然后,要访问导入包的导出成员,请在其前面加上包的名称,并用点连接这两个成员;e、 g.
packagename.Membername

例如:

.
└── foo
    ├── AchFactory.go
    └── Start.go
.
├── foo
│   └── Start.go
└── bar
    └── AchFactory.go
开始,开始

去吧


您试图将连接传递到
AchFactory.go
?例如,如果在程序包x下启动.go,并且您想将变量DB调用到另一个程序包,则应在变量名
x.DB
之前添加程序包名,然后添加点:好的软件包名称简短明了。它们是小写,没有欠分或混合大写。请包括Start.go和AchFactory.go的导入语句。此外,您还提到了一个要防止的错误,但您没有包括实际的错误消息,如果我们知道您遇到的确切错误,我们将更容易帮助您。感谢您的帮助,它已修复:)