在go中有时候传递参数前面要加 &符号, 加和不加的区别?

2024-06-26  本文已影响0人  lihao_李浩

在 Go 语言中,传递参数时是否需要加上 & 符号取决于参数的类型以及函数或方法的定义。& 符号用于获取变量的地址,即取得变量的指针。让我们通过几个示例来说明加和不加 & 符号的区别。

示例 1:传递基本类型参数

package main

import "fmt"

// 函数 addOne 用于增加传入的整数值的基础上加1
func addOne(x int) {
    x = x + 1
}

func main() {
    num := 5

    // 传递 num 的值给 addOne 函数
    addOne(num)
    
    // num 的值并没有改变
    fmt.Println("num after addOne:", num) // 输出:num after addOne: 5
}

在这个例子中,addOne 函数中的参数 x 是一个整数类型的变量。当我们调用 addOne(num) 时,num 的值被复制给了 x,在函数内部对 x 的操作不会影响到 num 的值,因此 num 的值仍然是 5。

示例 2:传递指针类型参数

package main

import "fmt"

// 函数 addOne 使用指针参数,通过指针修改传入的整数值
func addOnePtr(x *int) {
    *x = *x + 1
}

func main() {
    num := 5

    // 传递 num 的地址给 addOnePtr 函数
    addOnePtr(&num)

    // num 的值被修改了
    fmt.Println("num after addOnePtr:", num) // 输出:num after addOnePtr: 6
}

在这个例子中,addOnePtr 函数的参数 x 是一个 *int 类型的指针。当我们调用 addOnePtr(&num) 时,我们传递了 num 的地址给 addOnePtr 函数,使得函数内部可以直接修改 num 的值。因为 xnum 的指针,通过 *x 可以获取到 num 的值,并修改它。因此,最后打印 num 的值为 6。

总结:

这种区别在 Go 中非常重要,因为它影响了参数传递时是否进行值复制,以及是否能够在函数内部修改原始变量的值。

上一篇 下一篇

猜你喜欢

热点阅读