两种传递方式:
-
值传递:基本数据类型int系列,float系列,bool,string,数组,结构体struct。(值类型)
-
引用传递:指针,slice切片,map,chan管道,interface等都是引用传递。(引用类型)
其实不管是值传递还是引用传递,传递给函数的都是变量的副本,不同的是,值传递的是值的拷贝,引用传递的是地址的拷贝。一般来说,地址拷贝效率高,因为数据量小,而值拷贝决定拷贝的数据大小,数据越大,效率越低。
值传递和引用传递的使用特点:
-
值类型默认是值传递,变量直接存储值,内存通常在栈中分配。
-
引用类型默认是引用传递,变量存储的是一个地址,这个地址对应的空间才真正的存储数据,内存通常在堆中分配。当没有任何变量引用这个地址时,该地址对应的数据空间就变成了一个垃圾。由GC回收。
-
如果希望函数内的变量能修改函数外的变量,可以传入变量的地址 &,函数内以指针的方式操作变量。从而达到引用传递的效果。