错误:在go lang中的结构堆栈中是否覆盖?如何在golang中进行结构的深度复制



我在Go中创建了一个结构堆栈。

type Stack struct {
stack []Vehicle
}

我有这个结构和方法来创建一个新的结构实例:-

type Vehicle struct {
Name string
Quantity map[string]interface{}
}
function NewVehicle(name string) *Vehicle {
v := &Vehicle{Name:name}
v.Quantity = make(map[string]interface{})
return v
}

例如:-

m := NewVehicle("Two Wheeler")
m.Quantity['a'] = 10
// pushing stack 
Stack.push(clone(m))
m.Quantity['a'] = 20
Stack.pop(m)

预期:-

当我弹出时用Quantity['a'] = 10推送实例堆栈,那么它应该给我值10 of Quantity['a']

实际:-

我正在获取值20 of Quantity['a']

function clone(vehicle Vehicle*){}

有人能帮上忙吗?在推入堆栈之前,结构的复制深度有多深?或者在clone方法中会有什么来深度复制结构?

Map是一个指向实际Map对象的指针,所以如果你需要深度复制它,你必须手动完成:

func (v Vehicle) Copy() *Vehicle {
ret:=NewVehicle(v.Name)
for k,v:=range v.Quantity {
ret[k]=v
}
return ret
}
...
stack.push(m.Copy())

最新更新