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



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

从戈兰德配置中设置环境,它可以工作。 但它不是来自下面的代码,该应用程序不会打印计划信息。有人解释会发生什么吗?

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")
}

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

go 命令及其调用的工具检查几个不同的环境变量。

因此,在程序启动之前(即在构建时(检查 env 变量。从代码设置这些变量时,程序已运行。

它从 IDE 工作,因为变量是在编译之前应用的,因此代码会随您需要的所有更改一起运行。

相关内容

  • 没有找到相关文章

最新更新