func main() {
var a []int
a = append(a, 1, 2)
for _, _ = range a {
a = append(a, 1)
}
fmt.Println(a)
}
这个时候 range 不会无限循环,说明 range 在循环之前就创建了 a 的副本,a 的改动不会影响 range 的执行。(这一段持不肯定态度)
然后
func main() {
var a []int
a = append(a, 1, 2, 3, 4, 5, 4, 6, 6)
for i, t := range a {
if t == 4 }
a = append(a[:i], a[i+1:]...)
}
}
fmt.Println(a)
}
如果 range 提前保存了 a 的副本,a 中含有两个 4,第一次可以正确删除 4,第二次删除 4 的时候 i 的值应该为 a 的副本中的下标,应该会删除错误的数字,但事实是 go 正确的删除了两个 4
有没有人给小弟解个惑,纠结半天了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.