概念
值类型
值类型的数据,默认全部都是深复制,Array、Int、String、Struct、Float,Bool。
引用类型
引用类型的数据,返回的是值的地址,指针,切片,channel,interface,map,函数等
深拷贝
拷贝的是数据本身,创建一个新的对象,在内存中开辟一块新的地址。
package
a
浅拷贝
拷贝的是数据地址,只复制指向的对象的指针,此时新对象和老对象指向的内存地址是一样的,新对象值修改时老对象也会变化。释放内存地址时,同时释放内存地址。
package
arr
值传递
概括
如果函数传参是值类型,会复制值的副本。如果函数传参是引用类型,就会复制这个引用指针的值。
结构体 struct
看下结构体的例子:
package
看下结果,实际没有改变原结构体的值
原始struct地址是:0xc00000c030
函数里接收到struct的内存地址是:0xc00000c048
管道 channel
func
程序正常执行,说明使用的是同一个管道,只是传参的时候传递的是指针的值。具体可以看下源码 makechan
,实际创建的是一个引用
原始chan的内存地址是:0xc0000ac018
函数里接收到chan的内存地址是:0xc0000ac028
讨论区
登录评论