package main import "fmt" func main() { s1:= []int{1,2,3,4} a,b :=1,2 A(a,b) fmt.Println(a,b) B(s1) fmt.Println(s1) } func A(a ...int) { //这里传进来的其实是一个slice,引用类型 a[0] = 3 a[1] = 4 //尽管咱们在函数A当中接收到的是一个slice,可是它获得的是一个值拷贝 //和直接传递一个slice的区别看函数B fmt.Println(a) } func B(s []int) { //这里并非传递一个指针进去,而是对这个slice的内存地址进行了一个拷贝 //这里还能够看到像int型、string型进行常规的参数传进去的话,只是进行了个值拷贝,slice传进去虽然也是拷贝,可是它是内存地址的拷贝 s[0] = 4 s[1] = 5 s[2] = 6 s[3] = 7 fmt.Println(s) //在这里 咱们看到咱们在函数B当中的修改,实际上影响到了咱们main函数当中的变量s1 //若是直接传递一个slice,它的修改就会影响到这个slice的自己 } PS:值类型和引用类型进行函数传参拷贝是不同的,一个是拷贝值,一个是拷贝地址