在 Go 中,函数的参数传递有两种方式:值传递和引用传递(也称指针传递)。
值传递
说明:
在值传递方式下,调用函数时,实参的值会被复制一份后传递给对应的形参。在函数内部,对形参的修改不会影响到原来的实参
实例
func main() {
a := 10
b := 9
swap(a, b)
fmt.Println(a, b) // 输出: 10 9
}
func swap(x int, y int) {
x, y = y, x
}
在上述代码中使用了swap进行了数值的交换,但是在最后的输出结果依旧没有变化
引用传递
说明
在引用传递(指针传递)方式下,调用函数时,实参的地址会被传递给对应的形参,形参就可以直接通过指针修改实参的值
实例
func main() {
a := 10
b := "hello"
swap(&a, &b)
fmt.Println(a, b) // 输出:5 10
}
func swap(x *int, y *string) {
*x, *y = len(*y), strconv.Itoa(*x)
}
实例说明:
在上面的代码中,我们定义了一个 swap 函数用于交换两个参数的值。在 main 函数中,我们先定义了两个变量 a 和 b,分别赋值为 10 和 “hello”。然后,我们调用 swap 函数,并将 a 和 b 的地址作为实参传递给该函数。在 swap 函数内部,我们通过指针访问实参的值,将a:“hello”的长度和b进行了交换操作。由于参数是按引用传递的,所以对实参 a 和 b 的修改也会生效,最终输出结果为 5和 10。