【发布时间】:2019-11-21 15:14:18
【问题描述】:
在制作 Golang 应用程序时
关于Mysql的读取方式,最好用main函数读取环境变量,传给参数。
原因导致环境变量是一种全局变量情况,在测试过程中从模块外部查看时,你不知道为什么DB包连接到一个名为XXX的主机。我收到了一个解释,有人怀疑可能会写入一个固定值
当前代码
mysql.go
func Init() *gorm.DB {
path := strings.Join([]string{os.Getenv("MYSQL_USER"), ":", os.Getenv("MYSQL_PASSWORD"), "@tcp(", os.Getenv("DB_HOST"), ":", os.Getenv("DB_PORT"), ")/", os.Getenv("MYSQL_DATABASE"), "?charset=utf8&parseTime=True&loc=Local"}, "")
db, err := gorm.Open("mysql", path)
if err != nil {
panic(err)
}
err = db.DB().Ping()
if err != nil {
panic(err)
}
DB = db
return DB
}
main.go
func main {
db := mysql.Init()
defer db.Close()
}
如果你能告诉我你是否知道最好的方法,我会很高兴。
谢谢
【问题讨论】:
-
我会为此目的使用一个配置文件。您可以在其中添加初始化字符串并在程序的初始化阶段读取它们。
-
为了提高可测试性,最好与
main中的调用上下文(命令行参数、环境变量等)进行交互,并将这些值传递给使用它们的函数。这样,测试可以根据需要调用具有测试值的相同函数。
标签: mysql go environment-variables