Golang Map 赋值与复制:深入浅出
在 Go 语言中,map 是一种引用类型,当将一个 map 赋值给另一个 map 时,实际上是将指向底层数据结构的指针进行了复制。这意味着对其中一个 map 的修改会影响到另一个 map。
下面是一个示例:
package main
import "fmt"
func main() {
// 创建一个 map
map1 := make(map[string]int)
map1['a'] = 1
map1['b'] = 2
// 将 map1 赋值给 map2
map2 := map1
// 修改 map2
map2['b'] = 3
fmt.Println(map1) // 输出: map[a:1 b:3]
fmt.Println(map2) // 输出: map[a:1 b:3]
}
可以看到,修改 map2 中的值后,map1 也发生了变化。
如果想要实现 map 的复制而不是引用复制,可以使用循环遍历 map 的方式进行复制。例如:
package main
import "fmt"
func main() {
// 创建一个 map
map1 := map[string]int{
"a": 1,
"b": 2,
}
// 复制 map1 到 map2
map2 := make(map[string]int)
for key, value := range map1 {
map2[key] = value
}
// 修改 map2
map2['b'] = 3
fmt.Println(map1) // 输出: map[a:1 b:2]
fmt.Println(map2) // 输出: map[a:1 b:3]
}
在上面的示例中,通过遍历 map1 的键值对,将其复制到 map2 中,然后再对 map2 进行修改,这样 map1 不会受到影响。
原文地址: https://www.cveoy.top/t/topic/pf44 著作权归作者所有。请勿转载和采集!