为什么从代码调用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")
}
尤里·费多罗夫(Yury Fedorov):

go命令文档提到go检查一些环境变量:

go命令及其调用的工具将检查一些不同的环境变量。

因此,在程序启动之前(即在构建时)检查env变量。当您通过代码设置这些变量时,该程序已经运行。

由于变量是在编译之前应用的,因此它可以在IDE中运行,因此代码将随您需要的所有更改一起运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章