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


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
}

}

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

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

你可能感兴趣的:(闭包作为Go程在运行时会发生什么?)