在 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 现在正在影响我。所以我将其设置为答案,直到我得到比这更好的解决方案。
我在 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 现在正在影响我。所以我将其设置为答案,直到我得到比这更好的解决方案。