packagemainimport"fmt"funcmain() {// Version A: items :=make([]map[int]int, 5)for i:=range items { items[i] =make(map[int]int, 1) items[i][1] =2 } fmt.Printf("Version A: Value of items: %v\n", items)// Version B: NOT GOOD! items2 :=make([]map[int]int, 5)for _, item :=range items2 { item =make(map[int]int, 1) // item is only a copy of the slice element. item[1] =2// This 'item' will be lost on the next iteration. } fmt.Printf("Version B: Value of items: %v\n", items2)}
输出结果:
Version A: Value of items: [map[1:2] map[1:2] map[1:2] map[1:2] map[1:2]]
Version B: Value of items: [map[] map[] map[] map[] map[]]
需要注意的是,应当像 A 版本那样通过索引使用切片的 map 元素。在 B 版本中获得的项只是 map 值的一个拷贝而已,所以真正的 map 元素没有得到初始化。