在 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
作者
Bobby Zhang
发布于
2022年1月19日
许可协议