1. 程式人生 > >golang資料型別在函式中傳值或傳址的整理

golang資料型別在函式中傳值或傳址的整理

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)
}