for range 遇到的坑 #
package main
import "fmt"
func main() {
slice := []int{0, 1, 2, 3} //定义切片
myMap := make(map[int]*int) //定义map类型,key为int型,值类型为int型指针
for index, value := range slice { //循环切片
myMap[index] = &value //取地址赋值给map类型变量,&表引用传递,因此map的每个key对应的值是最后一次循环值
}
prtMap(myMap)
/**
map[0]=3
map[1]=3
map[2]=3
map[3]=3
*/
//解决办法,增加中间变量
for index, value := range slice {
num := value //中间变量num
myMap[index] = &num
}
prtMap(myMap)
/**
map[0]=0
map[1]=1
map[2]=2
map[3]=3
*/
}
func prtMap(myMap map[int]*int) {
for key, value := range myMap { //遍历map类型
fmt.Printf("map[%v]=%v\n", key, *value)
}
}