gpt4 book ai didi

mysql - 在一个函数中定义的全局变量不会在另一个函数中保留定义

转载 作者:IT王子 更新时间:2023-10-29 01:52:03 24 4
gpt4 key购买 nike

经过一些阅读,我认为我需要这个 TestMain(m *testing.M) 构造来设置我的数据库。但是,在运行测试时,db 始终为 nil。我该如何解决这个问题?

var db *sql.DB

func TestMain(m *testing.M) {

db, err := sql.Open("mysql", os.Getenv("DSN"))
if err != nil {
log.Fatal("error opening database")
}

defer db.Close()
log.Printf("here testing with %v", db)
code := m.Run()
log.Printf("finished test")
os.Exit(code)

}

func Test_getRole(t *testing.T) {
if db == nil {
t.Fatalf("db is nil")
}
}

输出是:

2018/05/02 19:10:14 here testing with &{{bugzilla:SECRET@tcp(example.com:3306)/bugzilla?multiStatements=true 0x7aba40} 0 {0 0} [] map[] 0 0 0xc42001e180 0xc4200740c0 false map[] map[] 0 0 0 <nil> 0x4e9850}
--- FAIL: Test_getRole (0.00s)
main_test.go:32: db is nil

https://github.com/unee-t/processInvitations/blob/testfail/main_test.go#L43是完整代码的链接。

最佳答案

您的代码行 db, err := sql.Open("mysql", os.Getenv("DSN")) 创建了一个局部变量 db(函数 TestMain 的局部变量)。而是使用:

err := nil
db, err = sql.Open("mysql", os.Getenv("DSN"))

关于mysql - 在一个函数中定义的全局变量不会在另一个函数中保留定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50133266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com