golang参数

package main

import "fmt"

/*
golang中分为值类型和引用类型
值类型分别有:int系列、float系列、bool、string、数组和结构体
引用类型有:指针、slice切片、管道channel、接口interface、map、函数等
值类型的特点是:变量直接存储值,内存通常在栈中分配
引用类型的特点是:变量存储的是一个地址,这个地址对应的空间里才是真正存储的值,内存通常在堆中分配
*/

//引用类型有 切片、映射、通道、接口和函数类型
//------------go语言中切片和map、channel是地址传递,但是切片传递要有一个注意事项
func tests(a []int){
	a=append(a,1,2,3)
}
func main(){
	var s []int=[]int{89,4,5,6}
	tests(s)
	fmt.Println(s)
}
/*
在这里里面为什么调用函数后切片没有变化呢,切片不是地址传递吗?
这是因为在test函数里面用了append()函数,在调用函数时,
在栈区里面把1 2 3 添加到a里面然后重新分配了地址,
而原来的s切片还是指向原来地址,根本没有变,所以在main函数里面打印出s还是原来的,
不会改变,那么如何做到用了append后改变原来切片的值呢:直接return改边后的值


因为如果容量不足的时候会自动扩充,如果原来的地址后面没有足够的空间那么
就会重新找一个足够大的空间来储存,所以切片利用append的时候地址是有可能变化的
————————————————
版权声明:本文为CSDN博主「sgsgy5」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sgsgy5/java/article/details/81590184
*/

原文地址:https://www.cnblogs.com/lajiao/p/12642339.html