0

我有一个结构golang如下

type Test struct {
    prop *int
}

prop当指针指向零值时,我想对结构对象进行深度复制。真正的结构中有更多的字段,我想要整个结构 obj 的深度复制。我尝试使用gob编码解码方式,但由于此处提到的设计结果,它将指针转换为 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)
}

对此解决方案有何评论?

4

2 回答 2

1

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

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

于 2017-08-24T09:57:16.877 回答
0

截至目前,我正在使用 json 编码/解码解决方案,并且运行良好。

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

我听说可能的缺点是:

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

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

于 2017-08-25T11:35:47.300 回答