golang map 深拷贝
时间: 2023-10-16 10:11:20 浏览: 171
在 Golang 中,`map` 是引用类型,所以进行简单的赋值操作实际上只是复制了指针,而不是创建一个新的独立副本。如果你想要进行深拷贝,可以按照以下方法之一操作:
1. 使用循环遍历原始 `map`,然后逐个复制每个键值对到一个新的 `map` 中。
```go
original := map[string]int{"a": 1, "b": 2}
newMap := make(map[string]int)
for key, value := range original {
newMap[key] = value
}
```
2. 使用 `json` 包进行序列化和反序列化。这种方式需要确保你的 `map` 中的键和值都是可 JSON 序列化的。
```go
import (
"encoding/json"
"fmt"
)
original := map[string]int{"a": 1, "b": 2}
// 序列化原始 map
jsonBytes, err := json.Marshal(original)
if err != nil {
fmt.Println(err)
return
}
newMap := make(map[string]int)
// 反序列化为新的 map
err = json.Unmarshal(jsonBytes, &newMap)
if err != nil {
fmt.Println(err)
return
}
```
以上是两种常见的深拷贝 `map` 的方法。根据你的实际需求和性能要求,选择适合你的方式即可。
阅读全文