前言
Go中所有的参数传递都是值传递,是对数据进行一个拷贝。具体分为引用类型和非引用类型
-
非引用类型(值类型):int,string,float,bool,数组和struct;
特点:值类型变量声明后,直接存的就是对应的数据。
-
引用类型:指针,slice,map,channel,接口,函数等。
特点:变量存放的是一个内存地址值,这个地址值指向的空间存的才是最终的值。内存通常在堆中分配,当没有任务变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,通过GC回收。
这里我所说的值传递,意思就是引用类型在传递的时候,其实是将值实际地址,也就是当前变量所存的地址拷贝一份进行传递。
值传递
代码:
package main
import "fmt"
func main() {
var value = 3
//因为int为值类型 所以需要取地址符
fmt.Printf("modify before addr: %p value: %d\n", &value, value)