Golang 函数function
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:值类型和引用类型进行函数传参拷贝是不同的,一个是拷贝值,一个是拷贝地址