切片和地图都是引用类型。当地被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量。
以下为引用类型示例:
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