在 Go 没有引用值
在别的一些语言中,调用函数时,有传值以及传引用的区别,但是在 Go 中,没有传引用这样的说法。
Go 只有传值,Go 只有传值,Go 只有传值!!!
重要的事情说三遍。因此对于函数传参来说传入的值会被复制
- 对于基本类型来说,会直接复制相应的值传入其中
- 对于自自定义的结构体,也会复制然后传入其中
- 对于指针,会复制一个新的指针,指向原指针的值,因此传入指针可以修改原有的值
- 对于 map/slice/chan 来说,他们是内置的特殊结构体,内部包含了指向底层数据的指针,因此传入 map/slice/chan 可以修改原有的值
- 对于 array 来说,会复制产生一个新的 array,因此如果需要在函数中修改原有数组中的值,需要传入一个 array 指针。因为 array 的特殊性, 相关博客
归纳为一句话:在 Go 中所有值赋值,包括参数传递等,都是浅值复制(指针指向的值不会被复制)。
在 Go 没有引用值
https://blog.zhangliangliang.cc/post/go-has-no-refrence-value.html