单核执行如果for前面或者中间不延迟,主线程不会让出CPU,导致异步的线程无法执行,
从而无法设置flag的值,从而出现死循环
实例代码:
package main import ( "fmt" "runtime" _ "time" ) var ( flag = false str string ) func foo() { flag = true str = "setup complete!" } func main() { runtime.GOMAXPROCS(1) go foo() //time.Sleep(1 * time.Second) for { if flag { break } } fmt.Println(str) }
解决办法:1、for中间或者前面加延迟 2、runtime.GOMAXPROCS(1)改成runtime.GOMAXPROCS(2)