为什么从代码中调用 Setenv 不起作用?

我有一个简单的测试项目,预计在运行时打印 goroutine 调度消息。


从 Goland 配置中设置 env 是有效的。但它不是来自下面的代码,该应用程序不会打印日程安排信息。有人解释一下发生了什么吗?


func TestScheduler1() {


    var wg sync.WaitGroup

    wg.Add(10)


    for i := 0; i < 10; i++ {

        go work(&wg)

    }


    wg.Wait()

    // Wait to see the global run queue deplete.

    time.Sleep(3 * time.Second)

}


func work(wg *sync.WaitGroup) {

    time.Sleep(time.Second)


    var counter int

    for i := 0; i < 1e10; i++ {

        counter++

    }


    wg.Done()

}

初始化函数如下:


 func init()  {

    os.Setenv("GOMAXPROCS", "1")

    os.Setenv("GODEBUG", os.Getenv("GODEBUG") + "schedtrace=1000,scheddetail=1")

}


尚方宝剑之说
浏览 106回答 1
1回答

莫回无

go命令文档提到go检查一些环境变量:go 命令及其调用的工具检查一些不同的环境变量。因此,环境变量在程序启动之前(即构建时)进行检查。当您从代码中设置这些变量时,程序已经运行。它可以在 IDE 中运行,因为变量是在编译之前应用的,因此代码运行时会包含您需要的所有更改。
打开App,查看更多内容
随时随地看视频慕课网APP