在 golang 中具有指向 0 值的指针的深度复制结构

Deepcopying struct having pointer-to 0 value in golang

我在 golang 中有一个结构如下

type Test struct {
    prop *int
}

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

编辑: 我尝试使用 json encoding/decoding 并且有点奏效。但是我不知道它的缺点。

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

对此解决方案有何评论?

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

我用 https://github.com/mohae/deepcopy/blob/master/deepcopy.go 作为例子。 reflect.Copy 仅适用于切片或数组。 正如你所看到的,使用反射是正确的方式,但它比简单调用reflect.Copy更复杂。还有一些其他包实现了深拷贝,但我对这些包没有任何经验。

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

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

我听说可能的缺点是:

  • 有点慢
  • 在结构
  • 中使用json标签
  • 仅复制 public 个成员

但是 none 现在正在影响我。所以我将其设置为答案,直到我得到比这更好的解决方案。