package main import ( "fmt" ) func main() { m := make(map[int]int, 4) m[1] = 0 m[2] = 0 for k, _ := range m { i := 10 + k m[i] = 0 } fmt.Println(m) fmt.Println("len:", len(m)) }
这段代码返回:8或10或6作为循环后映射的长度。视频在这里, 游戏 在这里。
我看到新添加的元素进入范围,但无法解释为什么此循环随机停止吗?
规格:对于声明:
未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。如果在迭代过程中删除了尚未到达的映射条目,则不会生成相应的迭代值。 如果在迭代过程中创建了映射条目,则该条目可能在迭代过程中产生或可以被跳过。 对于创建的每个条目以及从一个迭代到下一个迭代,选择可能有所不同。如果映射为nil,则迭代次数为0。
规范指出,如果您在地图上添加条目,则循环可能会或可能不会访问您添加的元素,此外,被访问的元素甚至不确定,也无法确定(再次执行时可能会更改)。