使用闭包与使用函数参数之间的区别在于共享同一变量与获取值的副本有关。请考虑下面的两个示例。
在 Closure中, 所有函数调用都将使用中存储的值
i。在任何goroutines有时间打印它的值之前,该值很可能已经达到3。
在“ 参数” 示例中,每个函数调用都将传递进行
i调用时的值的副本,从而为我们提供我们更可能需要的结果:
关闭:
for i := 0; i < 3; i++ { go func() { fmt.Println(i) }()}结果:
3
3
3
参数:
for i := 0; i < 3; i++ { go func(v int) { fmt.Println(v) }(i)}结果:
0
1
2
游乐场: http :
//play.golang.org/p/T5rHrIKrQv



