Go语言中map切片添加map的陷阱:为何结果总是最后一个?
在Go语言中,使用map类型时,需要注意其引用特性。当我们将map添加到map切片时,如果重复使用同一个map变量,切片中的所有元素都将指向同一个内存地址,导致最终结果只有最后一个map的值。
代码示例中,循环遍历
列表,每次迭代都将数据添加到同一个
map中,然后将
追加到
切片。由于
是引用类型,每次修改都会影响到切片中所有指向
的元素。
解决方法:在循环中每次都创建新的map实例。修改后的代码如下:
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
立即学习
“
go语言免费学习笔记(深入)
”;
通过在循环内使用
创建新的map,确保每次迭代都将一个新的map实例添加到切片中,从而避免了数据覆盖的问题。 这保证了切片中每个元素都包含独立的map数据。
namesuseruserusersuseruserfor _, name := range names {
user := make(map[string]interface{}) // 关键:每次创建新的map
user["name"] = name
users = append(users, user)
}user := make(map[string]interface{})