温馨提示×

go值传递和指针传递有什么不同

go
小亿
84
2023-11-01 23:28:14
栏目: 编程语言

在Go语言中,函数参数可以通过值传递或指针传递。值传递是将参数的值复制给函数的参数,而指针传递是将参数的地址传递给函数的参数。

当使用值传递时,函数会对参数值进行复制,并在函数内部使用该副本进行操作,不会影响原始值。这意味着函数内部对参数值的修改不会影响函数外部的变量。

当使用指针传递时,函数会将参数的地址传递给函数的参数,函数内部通过该地址访问和修改原始值。这样可以避免复制大的数据结构,提高性能。函数内部对指针所指向的值的修改会影响函数外部的变量。

下面是一个示例代码,演示了值传递和指针传递的不同:

package main

import "fmt"

func valuePass(num int) {
    num = 10
}

func pointerPass(num *int) {
    *num = 10
}

func main() {
    num := 5

    valuePass(num)
    fmt.Println("Value Pass:", num) // 输出 5

    pointerPass(&num)
    fmt.Println("Pointer Pass:", num) // 输出 10
}

在上面的示例中,valuePass函数使用值传递,pointerPass函数使用指针传递。通过值传递的valuePass函数无法修改num的值,而通过指针传递的pointerPass函数可以修改num的值。

0