在Go中也存在引用变量这一概念,不过比PHP稍显复杂,我们先看一下代码:
package main import( "fmt" ) func main () { a := 1 b := &a *b = 2 fmt.Println("a = ", a) // 2 }在Go中,有一个概念叫指针,表示每个表量的临时虚拟存储地址。
当初始化变量a时,变量的实际存储情况如下:
当初始化变量b时,我们注意到在变量a前面添加了修饰符“&”,表示变量b的变量值为变量a的指针。如下图所示:
当我们需要通过变量b改变变量a的值时,不能直接使用“b = 2”这种写法,否则只会改变变量b的变量值,因此我们使用了“*b = 2”这种写法。修饰符“*”代表我们要改变的是该变量值中指针指向的变量值。如下图所示:
在函数中改变函数外的变量:
package main import( "fmt" ) func main () { a := 1 changeValue(&a) fmt.Println("a = ", a) // 2 } func changeValue(b *int){ *b = 2 }在函数中,入参的类型声明前添加修饰符“*”,代表仅接受整形变量的指针传入。同样的,在函数体内使用修饰符“*”才能改变a的值。
注:以上内容仅适用于整形、浮点型及字符串类型,其他类型处理方法有所不同。



