1. 程式人生 > >go中的值傳遞和引用傳遞

go中的值傳遞和引用傳遞

切片和map都是引用型別。當 map 被賦值為一個新變數的時候,它們指向同一個內部資料結構。因此,改變其中一個變數,就會影響到另一變數。

以下為引用型別示例:

package main

import "fmt"

/**
和 slices 類似,map 也是引用型別。
當 map 被賦值為一個新變數的時候,
它們指向同一個內部資料結構。
因此,改變其中一個變數,就會影響到另一變數。
 */
 func change(i int) (int){
 	i=i+1
 	return i
 }
func main() {
	a:=make(map[string]int)
	a["1"]=11
	a["2"]=22
	a["3"]=33
	fmt.Println(a)
	b:=a
	b["3"]=33333
	fmt.Println(a)
}

輸出:

map[1:11 2:22 3:33]
map[3:33333 1:11 2:22]
func main() {
	darr := [...]int{57, 89, 90, 82, 100, 78, 67, 69, 59}
	dslice := darr[2:5]
	fmt.Println("array before", darr)
	for i := range dslice {
		dslice[i]++
	}
	fmt.Println("array after", darr)
}

輸出:

array before [57 89 90 82 100 78 67 69 59]
array after [57 89 91 83 101 78 67 69 59]

以下為值引用型別:

func main() {
	a:="aaaa"
	b:=a
	b="bbbbbbbb"
	fmt.Println(a)
	fmt.Println(b)
}

輸出:

aaaa
bbbbbbbb