go中的值傳遞和引用傳遞
阿新 • • 發佈:2018-12-17
切片和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