踩过的go语言坑示例01

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)
	}
}

Build by Loppo 0.6.15