go 函数 切片参数append是引用吗

import "fmt"

func test() {
	var arr=[]string{"12","23","34"}
	fmt.Printf("arr %+v,arr cap %d\n",arr,cap(arr))
	arrNew:=slice(arr)
	fmt.Printf("new %+v,arrNew cap %d\n",arrNew,cap(arrNew))
	arrNew[0]="90"
	fmt.Printf("arr %+v,arr cap %d\n",arr,cap(arr))
	fmt.Printf("new %+v,arrNew cap %d\n",arrNew,cap(arrNew))

	arr1:=make([]string,3,4)
	arr1[0]="12"
	arr1[1]="23"
	arr1[2]="34"
	fmt.Printf("arr1 %+v,arr1 cap %d\n",arr1,cap(arr1))
	arrNew1:=slice(arr1)
	fmt.Printf("new1 %+v,arrNew1 cap %d\n",arrNew1,cap(arrNew1))
	arrNew1[0]="90"
	fmt.Printf("arr1 %+v,arr1 cap %d\n",arr1,cap(arr1))
	fmt.Printf("new1 %+v,arrNew1 cap %d\n",arrNew1,cap(arrNew1))

}
func slice(arr []string) []string {
	arr= append(arr, "78")
	return arr
}

执行结果

arr [12 23 34],arr cap 3
new [12 23 34 78],arrNew cap 6
arr [12 23 34],arr cap 3
new [90 23 34 78],arrNew cap 6
arr1 [12 23 34],arr1 cap 4
new1 [12 23 34 78],arrNew1 cap 4
arr1 [90 23 34],arr1 cap 4
new1 [90 23 34 78],arrNew1 cap 4

go的切片的数据格式

type SliceHeader struct {
	Data uintptr
	Len  int
	Cap  int
}
上一篇:前端基础(三十六、ES6 扩展运算符)


下一篇:JS的数组对象