golang的值传递和引用传递

s := [3]int{1, 2, 4}
func(v [3]int) {
	v[0] = 0
}(s)
fmt.Println(s) //参数固定长度数组是值传递 输出1 2 4

func(v []int) {
	v[0] = 0
}(s[:])
fmt.Println(s) //参数非固定长度是切片是引用传递 输出0 2 4

m := map[int]int{
	1: 10,
	2: 20,
	3: 30,
}
func(v map[int]int) {
	v[3] = 40
}(m)
fmt.Println(m) //map是引用传递 输出[1:10 2:20 3:40]

//另外channel也是引用传递
//-----------------------

type Test struct {
	a int
}

t := Test{a: 1}
func(v Test) {
	v.a = 5
}(t)
fmt.Println(t) //对象是值传递 输出{1}

//其他值传递的还有string 和各种基本类型

你可能感兴趣的:(技术)