golang資料型別在函式中傳值或傳址的整理
阿新 • • 發佈:2019-02-14
https://my.oschina.net/chai2010/blog/161384
slice/map/chan這三種資料型別在函式中就是傳址
從C轉GO的我對這段程式碼會有點疑惑,ChangeInt函式不能修改tmpint的值,這個好理解,因為input只是tmpint的一個拷貝,但是ChangeMap卻能修改tmpmap的值,照理說如果input也是tmpmap的拷貝,那麼ChangeMap將不能修改tmpmap的值,上述的連結文章裡可以看到map資料型別其實是傳指標(或者說傳地址)。因此map內的資料可以在ChangeMap函式中被修改(這三種資料型別的隱含屬性)
func ChangeInt(input int) { input = 4 } func ChangeMap(input map[int]string) { input[2] = "changed" } func main() { tmpmap := make(map[int]string) tmpmap[1] = "myname" tmpmap[2] = "yourname" ChangeMap(tmpmap) var tmpint int = 2 ChangeInt(tmpint) fmt.Println(tmpmap,tmpint) }