<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#不同的方法集