登录
首页 >  Golang >  Go问答

在 Golang 中的跨包调用时,全局变量变为 nil

来源:stackoverflow

时间:2024-03-07 15:30:28 342浏览 收藏

你在学习Golang相关的知识吗?本文《在 Golang 中的跨包调用时,全局变量变为 nil》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

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/vehicle/brand/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 的测试有一个调用 setUpTestMaincar 的测试没有,因此在测试该包时该变量未初始化。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>