值类型和引用类型
值类型:int、float、bool、string、数组array、结构体struct
引用类型:指针、切片slice、map、接口interface、函数func、管道chan
区别
值类型:
- 变量直接存储值,内存通常在栈中分配。
- 给新的变量赋值时(拷贝时),为深拷贝,直接开辟新的内存地址存储值。
引用类型:
- 变量直接存储内存地址,这个地址存储值。内存通常再堆上分配。
- 给新的变量赋值时(拷贝时),为浅拷贝,新的变量通过指针指向原来的内存地址。可以使用copy关键字实现引用类型的深拷贝。
- 当如果没有任何一个变量引用这个地址时,这个地址就会被GC垃圾回收。