2 回答

TA貢獻1840條經驗 獲得超5個贊
您應該使用指針接收器:
func (x *MyType) updateIt() {
newItem := make(MyType)
for i := 0; i < 3; i++ {
newItem[i] = i
}
*x = newItem
fmt.Println(x)
}
游樂場:https://play.golang.org/p/K82TTjHdDgg
解釋
函數(shù)“前面”的參數(shù)(所謂的接收器)的行為或多或少與普通參數(shù)相似。
想象一個這樣的函數(shù):
func updateIt(x MyType) {
newItem := make(MyType)
for i := 0; i < 3; i++ {
newItem[i] = i
}
x = newItem
fmt.Println(x)
}
在這里,您按值傳遞 x,而不是通過引用(或作為指針)傳遞 x。
發(fā)生的事情是x在函數(shù)內部被替換,但將其原始值保留在函數(shù)之外。通過傳遞指針,可以替換 x 指向的值,從而在函數(shù)外部更改 x 的值。
另見“圍棋之旅,指針”:https://tour.golang.org/moretypes/1

TA貢獻1844條經驗 獲得超8個贊
在函數(shù)中,創(chuàng)建一個新映射,并將該新映射的指針分配給 。mainx
然后將該指針的值傳遞給函數(shù)。updateIt
然后在內部將其替換為指向您在內部創(chuàng)建的另一個地圖的指針。然后,它會更新此新地圖,而不是更新內部創(chuàng)建的原始地圖updateItupdateItmain
這里要了解的最重要的事情是,您的程序會創(chuàng)建兩個不同的映射。
因此,請避免創(chuàng)建兩個映射并更新傳遞給函數(shù)的相同映射。updateIt
func (x MyType) updateIt() {
for i := 0; i < 3; i++ {
x[i] = i
}
fmt.Println(x)
}
https://play.golang.org/p/-MemfTv1uJV
- 2 回答
- 0 關注
- 98 瀏覽
添加回答
舉報