在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
的值。