我在golang
中有一个结构,如下所示
type Test struct {
prop *int
}
当prop
指向零值时,我想对struct对象进行深度复制。真正的结构体中有更多的字段,我想要整个struct obj的深度复制。我尝试使用gob
编码解码方式,但由于设计的结果here,它将指针转换为0指向nil指针。我还尝试使用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)
}
对此解决方案有何评论?
答案 0 :(得分:1)
https://play.golang.org/p/fVKW62BYDm
我使用https://github.com/mohae/deepcopy/blob/master/deepcopy.go作为示例。 reflect.Copy仅适用于切片或数组。 如您所见,使用反射是正确的方法,但它比简单地调用reflect.Copy更复杂。还有一些其他软件包可以实现深层复制,但我对这些软件包没有任何经验。
答案 1 :(得分:0)
截至目前,我正在使用json编码/解码解决方案并且运行良好。
func DeepCopy(a, b interface{}) {
byt, _ := json.Marshal(a)
json.Unmarshal(byt, b)
}
我听说可能的缺点是:
但他们现在都没有影响我。所以我把它设置为答案,直到我得到比这更好的解决方案。