在 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 不会受到影响。

Golang Map 赋值与复制:深入浅出

原文地址: https://www.cveoy.top/t/topic/pf44 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录