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