gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:38:08 25 4
gpt4 key购买 nike

repo/common/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
}

repo /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)
}

repo /车辆/品牌/maruti/car/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
}

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

最佳答案

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

关于go - 当从 Golang 中的另一个包调用时,全局变量变为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61797722/

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