如何确定 Go 中的两个变量是否引用同一实例?更具体地说,一个变量的值发生改变时,另一个变量的值也会受到影响。
进一步明确问题:如何确定两个变量是否满足 CPython 中的“is”运算符:
a is b
编辑:我不确定你想要什么。如果是关于变量的相等性或变量值的身份识别。这个答案是针对第二个问题(“2个变量引用相同的值实例”)。如果我误解了,我会删除这个答案。
==
是你想要的,我想。
如果a和b的类型是指针,那么a==b
意味着a和b是指向相同值的指针。
以下程序输出false
:
package main
import "fmt"
type test struct {
a int
}
func main() {
b := &test{2}
c := &test{2}
fmt.Println(c == b)
}
虽然这会打印出true
:
b := &test{2}
c := b
fmt.Println(c == b)
是一个充分条件,可以使得改变会导致的改变。对于非接口和非函数类型,可以比较指针以检查它们是否相等。然而,非指针类型无法共享实例。