值类型
1.变量直接存储值,内存通常在栈中分配
2.包含基本数据类型:int,float,bool,string以及数组和struct
3.默认值:
int,float:0
bool:false
string:""
数组:[]
strut:strut{
}
内存占用:声明即占有内存
引用类型
1.变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。
2.有指针,slice,map,chan,func等
3.声明(var)时的默认值都是nil,占很小的内存,不同类型的nil值占用的内存大小可能是不一样的,nil的大小一致与同类型中的非nil类型的值的大小一样大。不可直接操作
4.要进行操作需要使用make()初始化,初始化后不再为nil。操作之后不进行垃圾回收。赋值为nil时才回收
golang参数传递方式
参数传递有两种方式:
1.值传递
2.引用传递
golang采用的是值传递
针对值类型是直接复制一份传递,不影响原参数值。对内存占用大的数组和结构体,直接传递对占用比较多的资源,建议采用指针传递
针对引用类型是复制了一份指针进行传递,两个指针指向同一片内存空间,所以会修改原有参数。