猿问

如何深度复制对象

我有一个复杂的数据结构,它定义了一个类型P,我想对这种数据结构的一个实例进行深度复制。我找到了这个库,但是,考虑到 Go 语言的语义,像下面这样的方法不会更惯用吗?:

func (receiver P) copy() *P{
  return &receiver
}

由于该方法接收类型P的值(并且值始终通过副本传递),因此结果应该是对源的深层副本的引用,如本例所示:

src := new(P)
dcp := src.copy()

的确,

src != dst => true
reflect.DeepEqual(*src, *dst) => true


哆啦的时光机
浏览 99回答 1
1回答

狐的传说

此测试表明您的方法不执行复制package mainimport (    "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 samefmt.Println(x)  // but as you can see...}https://play.golang.org/p/xL-E4XKNXYe
随时随地看视频慕课网APP

相关分类

Go
我要回答