#go 传参 传值 传引用

引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到原内容数据。

严格来说Go语言只有值传递这一种传参方式,Go语言是没有引用传递的。Go语言中可以借助传指针来实现引用传递的效果。

函数参数使用指针参数,传参的时候其实拷贝一份指针参数,也就是拷贝了一份变量地址。函数的参数如果是指针,当函数调用时,虽然参数仍然是按拷贝传递的,但是此时仅仅只是拷贝一个指针,也就是一个内存地址,这样就不用担心实参拷贝造成的内存浪费、时间开销、性能降低的情况。

引用传递的作用如下。 传指针使得多个函数能操作同一个对象。 传指针更轻量级 (8bytes),只需要传内存地址。如果参数是非指针参数,那么值传递的过程中,每次在拷贝上面就会花费相对较多的系统开销(内存和时间)。所以当要传递大的结构体的时候,用指针是一个明智的选择。

Go语言中slice、map、chan类型的实现机制都是类似指针,所以可以直接传递,而不必取地址后传递指针。

作者:一口泡芙 链接:https://www.zhihu.com/question/298770485/answer/2781556347