go语言map拷贝陷阱

map 可以拷贝吗?

map 其实是不能拷贝的,如果想要拷贝一个 map ,只有一种办法就是循环赋值,就像这样

originalMap := make(map[string]int)
originalMap["one"] = 1
originalMap["two"] = 2

// Create the target map
targetMap := make(map[string]int)

// Copy from the original map to the target map
for key, value := range originalMap {
    targetMap[key] = value
}

如果 map 中有指针,还要考虑深拷贝的过程

originalMap := make(map[string]*int)
var num int = 1
originalMap["one"] = &num

// Create the target map
targetMap := make(map[string]*int)

// Copy from the original map to the target map
for key, value := range originalMap {
var tmpNum int = *value
    targetMap[key] = &tmpNum
}

如果想要更新 map 中的value,可以通过赋值来进行操作

map["one"] = 1

但如果 value 是一个结构体,可以直接替换结构体,但无法更新结构体内部的值

originalMap := make(map[string]Person)
originalMap["minibear2333"] = Person{age: 26}
originalMap["minibear2333"].age = 5

Kingram

golang

111 Words

2022-03-09 00:00 +0000