闭包作为Go程在运行时会发生什么?

<pre>
package main
import (
"fmt"
)

func main() {
done := make(chan bool)

values := []string{"a", "b", "c"}
for \_, v := range values {
    go func() {
        fmt.Println(v)
        done <- true
    }()
}

// 在退出前等待所有Go程完成
for _ = range values {
    <-done
}

}
</pre>

输出:  有可能是 c c c  而不是你想象的 a b c
       每一个闭包共享变量v, 所以v有可能被其他goroutine 修改.

参考:
http://docscn.studygolang.com/doc/faq#不同的方法集

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,021评论 25 709
  • 青衣折扇路过绣坊红窗前 万物惊动,素衣入心田 绣红银针划过青丝间 淡回头皱眉也温婉 青苔爬过石板记点点流年 黛眉藏...
    百度惊悚阅读 2,372评论 8 14
  • 海尔,一直走在追求的路上 【摘要】海尔集团创业于1984年,是全球大型家电第一品牌,目前已从传统制造家电产品...
    栾城安阅读 3,712评论 0 0
  • 文/西西 你就是一缕风 吹开了花朵,吹去了云 你的喁喁细语 你的离去悄无声息 连温柔都找不到一点点 证据 散落的月...
    花语清溪阅读 3,047评论 7 13
  • 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 Jav...
    唐影若凡阅读 3,211评论 0 0

友情链接更多精彩内容