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

标签 pointers go deep-copy gob go-reflect

我在 golang 中有一个结构如下

type Test struct {
    prop *int
}

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

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

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 仅适用于 slice 或数组。 如您所见,使用反射是正确的方法,但它比简单地调用 reflect.Copy 更复杂。还有一些其他包实现了深拷贝,但我对这些包没有任何经验。

关于pointers - 在 golang 中具有指向 0 值的指针的深度复制结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45857095/

相关文章:

c++ - 访问传递给函数的二维数组的段错误

unit-testing - 包外测试文件时的 Golang 测试覆盖率

serialization - 戈朗 : print struct as it would appear in source code

转到 ioutil.ReadFile() 中的错误

python线程安全的可变对象副本

c++ - 在简单的层次结构中重新定义深度复制/删除/赋值

c - 动态分配动态分配结构的数组?

pointers - Cgo指针字符串 slice (*[]string)的指针传递规则?

c - 错误 : subscripted value is not an array, 指针或内核中的 vector

mysql - 如何在 Django 中创建数据库对象的深度克隆?