Mysql 全局变量未传递到下一个包
因为golang不支持循环依赖,我只是刚刚开始在golang。我的连接变量遇到了一个小问题,我使用gorm驱动程序,MySQL作为我的数据库引擎 我试图将连接变量传递给程序调用的下一个函数,它位于另一个文件中。 AchFactory.goMysql 全局变量未传递到下一个包,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",
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的导入语句。此外,您还提到了一个要防止的错误,但您没有包括实际的错误消息,如果我们知道您遇到的确切错误,我们将更容易帮助您。感谢您的帮助,它已修复:)