thumbnail

go值拷贝

liuyuede liuyuede | 1 分钟阅读
2年前

概念

值类型

值类型的数据,默认全部都是深复制,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

讨论区

登录评论
暂无评论