1. 基础类型
- byte,int,bool,string,float,数组等均是传值。
2. struct
- struct作为函数中的参数,其传递可以是传值(对象的复制,需要开辟新的空间来存储该新对象)和传引用(指针的复制,和原来的指针指向同一个对象)
- 建议使用指针,原因有两个:能够改变参数的值,避免大对象的复制操作节省内存。
3. 函数
- 函数作为参数,其本质是传函数指针,为传引用
4. slice
- 结论:作为函数参数时,为传引用。
- 数组切片的本质是一个如下的数据结构
- 包含一个pointer,一个长度,一个容积的结构。其中pointer指向的是作为主要存储空间的array。
- 那么在进行传入函数和赋值的时候,会将slice的结构复制一份,但是pointer还是指向原地址。从而实现了传引用。
- 注意slice扩容和不扩容的情况。
- 扩容情况下,切片的地址会发生变化,新增的元素不会影响到原切片;
- 不扩容的情况下&
- 注意slice扩容和不扩容的情况。