go中的值传递和引用传递

切片和地图都是引用类型。当地被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量。

以下为引用类型示例:

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

 

你可能感兴趣的:(go)