我在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())