---
golang中for range经常会被用来遍历slice、map、chan、array,但是由于在某些情况下,其内部实现并不是你想的那样,所以使用时还是需要特别注意。...以下是两个错误使用for range的场景
场景1 - 在for range中获取循环变量的地址
代码
package main
func main() {
vals := []int{0, 1,...1中那样,v的地址虽然没变,但是值会随着循环变化。...循环中的一个循环,但是这里由于closure对于v1的引用,所以在一个循环结束后,v会发生逃逸,并不会被立即回收;
把v作为closure的参数,通过golang的pass-by-value,隐式的创建了一个...v的副本;
大部分刚入门golang的开发者都会犯类似错误,讲道理这个可以算是语言的缺陷了,毕竟让用户少犯错也是语言的义务。