当前位置:  首页>> 技术小册>> GO面试指南

Go 是值传递的语言,这意味着函数的参数是通过传递参数的值来传递的,而不是通过传递指针或引用来传递的。但是,由于一些内置类型的底层实现是指针,因此看起来有时候是引用传递。

下面是一个示例代码,演示了 Go 是值传递的:

  1. package main
  2. import "fmt"
  3. func changeValue(x int) {
  4. x = 10
  5. }
  6. func main() {
  7. a := 5
  8. changeValue(a)
  9. fmt.Println(a) // 输出:5
  10. }

在上面的示例中,我们定义了一个函数 changeValue,该函数接受一个整数参数 x,并将其值更改为 10。然后在 main 函数中,我们创建一个变量 a,并将其值设置为 5,接着调用 changeValue(a) 函数,但是 a 的值没有被更改,因为在函数中修改的是参数的副本,而不是实际的变量。

如果要在函数中更改变量的值,可以使用指针或引用来传递参数。下面是一个使用指针的示例代码:

  1. package main
  2. import "fmt"
  3. func changeValue(x *int) {
  4. *x = 10
  5. }
  6. func main() {
  7. a := 5
  8. changeValue(&a)
  9. fmt.Println(a) // 输出:10
  10. }

在上面的示例中,我们将 changeValue 函数的参数类型更改为整数指针类型 int,然后将变量 a 的地址传递给该函数。在函数中,我们使用解引用操作符 来修改指针所指向的值,这样可以更改实际的变量的值。最后,我们在 main 函数中输出了更改后的变量 a 的值。

注意,在使用指针传递参数时,需要确保指针所指向的变量存在于函数的调用方作用域中,否则会导致编译错误。


该分类下的相关小册推荐: