代码之家  ›  专栏  ›  技术社区  ›  Rohanil

golang中指针指向0值的Deepcopying结构

  •  0
  • Rohanil  · 技术社区  · 8 年前

    我有一个结构 golang 如下所示

    type Test struct {
        prop *int
    }
    

    我想在以下情况下获取struct对象的deepcopy: prop gob 编码-解码方式,但由于上述设计的结果,它将指针转换为0到零指针 here . 我也试着使用 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)
    }
    

    2 回复  |  直到 8 年前
        1
  •  1
  •   S. Diego    8 年前

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

    我用过 https://github.com/mohae/deepcopy/blob/master/deepcopy.go 例如。 反映复制仅适用于切片或阵列。 如您所见,使用反射是正确的方法,但它比简单地调用反射更复杂。复制还有一些其他软件包实现了深度复制,但我对这些软件包都没有任何经验。

        2
  •  0
  •   Rohanil    8 年前

    到目前为止,我正在使用json编码/解码解决方案,它工作得很好。

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

    我听说可能的缺点是:

    • 在结构中使用json标记
    • 仅复制公共成员