golang数组当参数传递时,是值传递。

golang切片当参数传递时,是引用传递。

如:

arr := make([]int, 0, 10)
arr = append(arr, 1)

test(arr)
func test(a []int){
    a[0] = 2
}

调用 test(arr) ,结果是arr[0]值为2

但是,当函数中有append对切片做出改变时

如:

arr := make([]int, 0, 10)
arr = append(arr, 1)

test(arr)
func test(a []int){
    a = append(a, 2)
}

调用 test(arr) ,结果是arr[0]值为1,arr[1]没有值,arr长度依然为1

解决方案:传参时声明引用

arr := make([]int, 0, 10)
arr = append(arr, 1)

test(&arr)
func test(a *[]int){
    (*a) = append((*a), 2)
}

结果,arr长度为2,append生效