下面这段代码很神奇

openset · 2018-12-31 11:44:45 · 1585 次点击
openset
Less is more!

2楼 @chenph 问题是range map时会把动态追加的数据也遍历出来,只是部分。slice就没有这个问题,不会遍历追加的数据。map在遍历时动态修改了值,会打印出新值。切片也是这样,但是永远不会遍历追加的数据。

s := []int{1, 2, 3}
for i, v := range s {
    s = s[0:2]
    fmt.Println("i: ", i, "\tv: ", v)
}
fmt.Println(s)

运行输出结果:

i:  0   v:  1
i:  1   v:  2
i:  2   v:  3
[1 2]
#6
更多评论

The range expression x is evaluated once before beginning the loop

#2