环境:go1.7.3 win7 64bit
代码1的执行结果是隔一秒只打印0,不符合预期
```
0
0
0
...
```
把代码1改成代码2,结果就对了
```
353036023
713389754
1073135313
...
```
这是个什么情况,有大佬知道吗
**代码1:**
```
package main
import (
"fmt"
"time"
)
func main() {
i := 0
go func () {
for true {
//隔一秒打印i
time.Sleep(1000000000)
fmt.Println(i)
}
}()
for true {
i++
}
}
```
**代码2:**
```
package main
import (
"fmt"
"time"
)
func main() {
i := 0
go func () {
for true {
i++
}
}()
for true {
//隔一秒打印i
time.Sleep(1000000000)
fmt.Println(i)
}
}
```
第 1 条附言 ·
已解决这个问题,问题原因是go编译器默认优化了代码,在build的时候添加-gcflags '-N -l'禁用优化就可以了
![image.png](https://static.studygolang.com/190329/890d6aad9919001cb2259022fc7c3e6f.png)
编译器直接没生成 i++ 的汇编代码,不知道为何编译器直接没编译出 i++ 这个命令,可能编译器做了判断这种简单的for是没意义的。改复杂一点,编译器识别不出来,就可以了。如下图
![image.png](https://static.studygolang.com/190329/eafc9d38c0e6e173819ac7978841ae0b.png)
#3
更多评论