一、前言
一个简单的代码示例:
package main
func myFunction(a, b int) (int, int) {
return a + b, a - b
}
func main() {
myFunction(66, 77)
}
二、参数传递
函数参数传递分为值传递和引用传递,下面是两者的区别:
传值
:函数调用时会多参数进行拷贝,调用方和被调用方持有不相关的两份数据。
引用传递
:函数调用时会传递参数的指针,被调用方和调用方两者持有相同的数据,任意一方做出的修改都会影响另一方。
注意
Go 语言选择了传值的方式,无论是传递基本类型、结构体还是指针,都会对传递的参数进行拷贝。所以如果当前数组的大小非常的大,这种传值的方式会对性能造成比较大的影响。
提示
若传递的参数是指针时,函数内部会复制指针,即两个指针同时指向原有的内存地址,所以在 Go 中指针也是值传递。
所以在传递参数是数组或者内存占用非常大的结构体时,我们应该尽量使用指针作为参数类型,进而避免因为数据拷贝带来的性能影响。