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 和各种基本类型
此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论