Go 结构指针的切片成员未更新

Go 结构指针的切片成员未更新,go,slice,Go,Slice,代码如下: type T struct { list []bool flag bool length uint64 } func (o *T) Print() error { o.increase(newSize) o.list[newSize] = true } func (obj *T) increase(neeSize uint64) { newBufferSize := 2 * newSize

代码如下:

type T struct {
    list       []bool
    flag       bool
    length     uint64
}

func (o *T) Print() error {
    o.increase(newSize)
    o.list[newSize] = true
}

func (obj *T) increase(neeSize uint64) {
    newBufferSize := 2 * newSize 
    tempSeq := NewReceiverSequence(newBufferSize)
    copy(tempSeq.sequence, obj.sequence)
    obj = tempSeq
    return
}

在调试过程中,在
Print()
中,我们看到
o.increase(newSize)
没有更新
o
的成员,在
increase
中有行
obj=tempSeq
,因此产生了错误:

运行时错误:索引超出范围[19],长度为10

用于线路

o.list[newSize] = true
10
是调用
o.increase(newSize)



为什么
increase()
在调用
o.increase(newSize)
后不更新?

obj=tempSeq
只是将接收器指针分配给一个新指针。该赋值的效果在该方法外部不可见,因为您不是在更新该指针指向的对象的内容,而是在更新指针以指向新结构。一旦方法返回,调用方将继续使用未修改的对象


试试
*obj=*tempSeq

是深度拷贝吗?不是,它是浅拷贝。浅拷贝,你的意思是,片头被拷贝,但不是底层数组。布尔值被复制。复制长度值。正确吗?正确的是
Print()
中的
newNumber
是什么?这是从哪里来的?@Flimzy我想,对于这个问题来说,这不是一个相关的问题。不是吗?提供答案总是与问题相关的。@Flimzy对此我很抱歉。我会从下次开始努力提高