【问题标题】:Deepcopying struct having pointer-to 0 value in golang在golang中具有指向0值的深度复制结构
【发布时间】:2017-08-24 08:51:35
【问题描述】:

我在golang 中有一个结构,如下所示

type Test struct {
    prop *int
}

prop 是指向零值的指针时,我想对结构对象进行深度复制。真正的结构中有更多的字段,我想要整个结构 obj 的深度复制。我尝试使用gob 编码解码方式,但由于here 提到的设计结果,它将指针转换为0 到零指针。我也尝试使用reflect.Copy,但它因错误panic: reflect: call of reflect.Copy on struct Value 而恐慌。有没有更好的方法来深度复制此类结构对象?

编辑: 我尝试使用json 编码/解码,它有点工作。但我不知道它的缺点。

func DeepCopy(a, b interface{}) {
    byt, _ := json.Marshal(a)
    json.Unmarshal(byt, b)
}

有关于这个解决方案的 cmet 吗?

【问题讨论】:

    标签: pointers go deep-copy gob go-reflect


    【解决方案1】:

    https://play.golang.org/p/fVKW62BYDm

    我以https://github.com/mohae/deepcopy/blob/master/deepcopy.go 为例。 reflect.Copy 仅适用于切片或数组。 如您所见,使用反射是正确的方法,但它比简单地调用reflect.Copy要复杂得多。还有一些其他的包可以实现深拷贝,但我对这些包没有任何经验。

    【讨论】:

    • 您好,我通过添加一种使用json 编码/解码来解决此问题的解决方案来编辑​​问题。您对此有何看法?
    【解决方案2】:

    截至目前,我使用的是json编解码方案,效果不错。

    func DeepCopy(a, b interface{}) {
        byt, _ := json.Marshal(a)
        json.Unmarshal(byt, b)
    }
    

    我听说可能的缺点是:

    • 有点慢
    • 在结构中使用 json-tags
    • 仅复制公共成员

    但他们现在都没有影响到我。所以我将此设置为答案,直到我得到比这更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多