我有一个简单的测试项目,该项目有望在运行时输出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")
}
最佳答案
go
command documentation提到go
检查一些环境变量:
因此,在程序启动之前(即在构建时)检查env变量。当您从代码中设置这些变量时,该程序已经运行。
由于变量是在编译之前应用的,因此它可以在IDE中运行,因此代码将随需要的所有更改一起运行。
关于go - 为什么从代码调用Setenv不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57176229/