第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將地圖指向方法內的新地圖會在離開方法后失去效果

將地圖指向方法內的新地圖會在離開方法后失去效果

Go
慕妹3242003 2022-08-30 15:06:28
此代碼在 Go PlayGround 上可見:package mainimport "fmt"type MyType map[int]intfunc (x MyType) updateIt() {    newItem := make(MyType)    for i := 0; i < 3; i++ {        newItem[i] = i    }    x = newItem    fmt.Println(x)}func main() {    x := make(MyType)    x.updateIt()    fmt.Println(x)}生產:map[0:0 1:1 2:2]map[]雖然我期望:map[0:0 1:1 2:2]map[0:0 1:1 2:2]為什么?我的理解是:作為一個參數(shù),然后創(chuàng)建并更改指針,使其指向。所以指向 的數(shù)據(jù)。這似乎確實是內部的情況,從第一行可以看出。但是,當在方法之后打印時,更改將丟失。x.updateIt()xnewItemxnewItemxnewItemupdateItx我是Go的新手,這對我來說是意想不到的行為,你能解釋一下嗎?
查看完整描述

2 回答

?
慕斯709654

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


查看完整回答
反對 回復 2022-08-30
?
婷婷同學_

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


查看完整回答
反對 回復 2022-08-30
  • 2 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號