Go指针取址问题:循环后每次都拿到相同内容

例子:

go 复制代码
func main() {
	yourList := [...]int{1, 2, 3}
	yourMap1 := make(map[int]*int)
	yourMap2 := make(map[int]*int)
	for key, value := range yourList {
		// 修改前
		yourMap1[key] = &value
		// 修改后
		tmp := value
		yourMap2[key] = &tmp
		fmt.Println(value, &value, tmp, &tmp)
	}
	fmt.Println(yourMap1)
	fmt.Println(yourMap2)
}

//1 0xc000020090 1 0xc000020098

//2 0xc000020090 2 0xc0000200a8

//3 0xc000020090 3 0xc0000200c0

//map[0:0xc000020090 1:0xc000020090 2:0xc000020090]

//map[0:0xc000020098 1:0xc0000200a8 2:0xc0000200c0]

前者地址一直没变,但后者地址会变,因为我们把值拷贝一份之后又重新取址。

注意:

  1. 每次都要赋值新变量即:=

  2. 如果改成这样是没用的 tmp := &value;yourMap2[key] = tmp;也就是把地址给新变量,还是会把一样的地址赋予到map里面

相关推荐
⑩-4 分钟前
基于Redis Lua脚本的秒杀系统
java·redis
0和1的舞者28 分钟前
《网络编程核心概念与 UDP Socket 组件深度解析》
java·开发语言·网络·计算机网络·udp·socket
稚辉君.MCA_P8_Java28 分钟前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划
oioihoii38 分钟前
C++语言演进之路:从“C with Classes”到现代编程基石
java·c语言·c++
N***738543 分钟前
SQL锁机制
java·数据库·sql
小白程序员成长日记1 小时前
2025.11.23 力扣每日一题
算法·leetcode·职场和发展
Java天梯之路1 小时前
Java 初学者必看:接口 vs 抽象类,到底有什么区别?
java·开发语言
小熊officer1 小时前
Nginx中正向代理,反向代理,负载均衡
java·nginx·负载均衡
信码由缰1 小时前
Java 应用容器化与部署
java
方白羽1 小时前
Kotlin遇上Java 静态方法
android·java·kotlin