是否有内置功能去制作任意地图的副本?

Pin*_*hio 12 go

是否有内置功能去制作任意地图的副本?

我可以手工编写,但我之前发现,当我想对地图进行深入比较时,我正在寻找类似的问题,似乎已经内置了一个函数!所以类似地,也许我想知道是否有内置的或一些库或包用于在golang中制作地图的深层副本.我相信我不是第一个想要复制地图的人.

副本我的意思是你可以创建两个不同的变量来引用内存中的不同映射,即使它们是相同的内容.

小智 8

有关更一般的答案,您可以对地图进行编码并使用编码/ gob在新变量中对其进行解码.

这种方式的优点是它甚至可以处理更复杂的数据结构,比如包含一片地图的结构片.

package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "log"
)

func main() {
    ori := map[string]int{
        "key":  3,
        "clef": 5,
    }

    var mod bytes.Buffer
    enc := gob.NewEncoder(&mod)
    dec := gob.NewDecoder(&mod)

    fmt.Println("ori:", ori) // key:3 clef:5
    err := enc.Encode(ori)
    if err != nil {
        log.Fatal("encode error:", err)
    }

    var cpy map[string]int
    err = dec.Decode(&cpy)
    if err != nil {
        log.Fatal("decode error:", err)
    }

    fmt.Println("cpy:", cpy) // key:3 clef:5
    cpy["key"] = 2
    fmt.Println("cpy:", cpy) // key:2 clef:5
    fmt.Println("ori:", ori) // key:3 clef:5
}
Run Code Online (Sandbox Code Playgroud)

如果你想了解更多关于gobs的信息,可以去博客文章.


bis*_*hop 2

不,没有内置的用于地图深复制的单行代码。

然而,有一个迭代解决方案以及一个用于深度复制的通用包