了解 php 和 go 中引址和取值的微妙差别
在 php 和 go 语言中,引址和取值都是必不可少的概念,但它们在实现方式上存在着一些差异。
php 中的取别名
php 中只有一个引址符 &,用于创建一个变量的别名。当您分配一个取别名的变量时,您实际上并没有修改原始变量,而是创建了一个引用它的新变量。因此,对别名变量的任何修改都会反映在原始变量上。
go 中的引址和取值
go 语言中引址操作符 & 和取址操作符 * 区分得更清楚。& 用于获取一个变量的地址,而 * 用于获取变量本身。这意味着当您分配一个引址变量时,您创建的新变量指向原始变量的地址,而不是指向原始变量本身。
因此,在 go 中,如果您需要修改原始变量,您必须先对引址变量进行取址。
比较 php 的 & 和 go 的 &*/
php 中的 & 和 go 中的 &*/ 没有直接可比性,因为它们在概念上是不同的。php 的 & 创建一个别名,而 go 的 &*/ 用于引址和取值。
示例
看看下面的 php 和 go 代码示例:
php
$a = 1; $b = &$a; $b++; echo $c; # 2
go
a := 1 b := &a *b++ fmt.Println(*b); # 2
在 php 中,$b 是 $a 的别名,因此对 $b 的修改也会修改 $a。
在 go 中,b 是一个指向 a 地址的指针,因此您必须先取址 b 才能修改 a 的值。
希望这个解释能帮助您理解 php 和 go 中引址和取值的微妙差别。