1. 首页
  2. 主题
  3. Go问与答

关于匿名函数使用共享变量的问题

gpfly · · 1806 次点击
环境: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'禁用优化就可以了
gpfly
邮箱的电话号码是很久以前的已经废弃的号码
对的,后面我在两个循环里面都打印i,结果就不是0了
#8
更多评论
这个问题在我电脑上,两种情况打印出的结果都是 0。 环境:go version go1.12 linux/amd64
#1
真奇怪,我记得上午我测试的时结果是不一样的。然后刚才我又测试了一下,怎么结果都是0了?题主确定结果不一样?
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中