从 Golang 中的另一个包调用时,全局变量变为 nil

Ama*_*tel -2 testing go

回购/通用/logger.go

package common
var once sync.Once
var Logger *logrus.Logger
func InitLogger() {
   once.Do(func() {
        Logger = logrus.New()
        Logger.Out = filename // file opened and *file assigned here for logging
    })

    return Logger
}
Run Code Online (Sandbox Code Playgroud)

回购/setup_test.go

package main
func setUp() {
    common.InitLogger()
    fmt.Println(common.Logger) // prints some pointer related things which means logger is initialized
}
func TestMain(m *testing.M) {
    fmt.Println("Starting Test...")
    setUp()
    code := m.Run()
    common.APILog.Println("Finishing Main...")
    os.Exit(code)
}
Run Code Online (Sandbox Code Playgroud)

回购/车辆/品牌/马鲁蒂/汽车/mycar_test.go

package car
func TestMyFunc(t *testing.T) {
    **t.Log(common.Logger)               // When i run go test ./... this Prints nil , Why ?**
    // Doing some tests
}
Run Code Online (Sandbox Code Playgroud)

由于这个 common.Logger.Println("some data") 到处都给出 nil 指针错误根据我的理解,一旦 Logger 被初始化,它应该可用,因为它是一个全局变量。我在这里肯定错过了一些微妙的东西。请帮忙

Adr*_*ian 5

每个包都经过独立测试。的测试main有一个TestMain调用setUp. 的测试car没有,因此在测试该包时未初始化该变量。