为了账号安全,请及时绑定邮箱和手机立即绑定

如何深度复制对象

如何深度复制对象

Go
哆啦的时光机 2023-06-05 19:37:02
我有一个复杂的数据结构,它定义了一个类型P,我想对这种数据结构的一个实例进行深度复制。我找到了这个库,但是,考虑到 Go 语言的语义,像下面这样的方法不会更惯用吗?:func (receiver P) copy() *P{   return &receiver }由于该方法接收类型P的值(并且值始终通过副本传递),因此结果应该是对源的深层副本的引用,如本例所示:src := new(P) dcp := src.copy()的确,src != dst => true reflect.DeepEqual(*src, *dst) => true
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

此测试表明您的方法不执行复制


package main


import (

    "fmt"

)


type teapot struct {

   t []string

}

type P struct {

   a string

   b teapot

}


func (receiver P) copy() *P{

   return &receiver

}


func main() {


x:=new(P)

x.b.t=[]string{"aa","bb"}

y:=x.copy()


y.b.t[1]="cc"  // y is altered but x should be the same


fmt.Println(x)  // but as you can see...


}

https://play.golang.org/p/xL-E4XKNXYe


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信