跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Go语言中:循环添加map到map切片,为何结果总是最后一个?

Go语言中map切片添加map的陷阱:为何结果总是最后一个? 在Go语言中,使用map类型时,需要注意其引用特性。当我们将map添加到map切片时,如果重复使用同一个map变量,切片中的所有元素都将指向同一个内存地址,导致最终结果只有最后一个map的值。 代码示例中,循环遍历
names
列表,每次迭代都将数据添加到同一个
user
map中,然后将
user
追加到
users
切片。由于
user
是引用类型,每次修改都会影响到切片中所有指向
user
的元素。 解决方法:在循环中每次都创建新的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语言免费学习笔记(深入) ”;
for _, name := range names { user := make(map[string]interface{}) // 关键:每次创建新的map user["name"] = name users = append(users, user) }
通过在循环内使用
user := make(map[string]interface{})
创建新的map,确保每次迭代都将一个新的map实例添加到切片中,从而避免了数据覆盖的问题。 这保证了切片中每个元素都包含独立的map数据。

相关文章