3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
返回地圖的副本(不是地圖值而是所有內(nèi)容)可能會(huì)更好。切片也是如此。
請(qǐng)注意,地圖和切片是描述符。如果您返回一個(gè)映射值,它將引用相同的底層數(shù)據(jù)結(jié)構(gòu)。有關(guān)詳細(xì)信息,請(qǐng)參閱博客文章Go maps in action。
創(chuàng)建一個(gè)新地圖,復(fù)制元素并返回新地圖。這樣你就不用擔(dān)心誰修改了。
制作地圖的克?。?/p>
func Clone(m map[string]Money) map[string]Money {
m2 := make(map[string]Money, len(m))
for k, v := range m {
m2[k] = v
}
return m2
}
測(cè)試Clone()函數(shù)(在Go Playground上試試):
m := map[string]Money{"one": 1, "two": 2}
m2 := Clone(m)
m2["one"] = 11
m2["three"] = 3
fmt.Println(m) // Prints "map[one:1 two:2]", not effected by changes to m2
所以你的GetMailbox()方法:
func (a Account) GetMailbox() map[string]Money{
return Clone(a.mailbox)
}
- 3 回答
- 0 關(guān)注
- 186 瀏覽
添加回答
舉報(bào)