为了账号安全,请及时绑定邮箱和手机立即绑定

Python的“ is”运算符的Go等效项是什么?

Python的“ is”运算符的Go等效项是什么?

Go
慕的地8271018 2021-04-29 21:14:09
如何确定2个变量在Go中是否引用同一实例?更具体地说,一个变量值的突变也会影响另一变量的值。为了进一步完善这个问题:每个CPython如何确定2个变量何时满足“ is”运算符:a is b
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

在Python中,所有值都是对对象的引用(即指针)。您永远无法获得对象本身作为值。所述is操作者比较两个值,它们是指针,指针相等; 而==运算符则比较两个这样的指针,以确保所指向的对象相等。

在Go中,它有点复杂。Go具有指针以及其他非指针类型(布尔,数字类型,字符串,数组,切片,结构,函数,接口,映射,通道)。对于非指针类型,要求指针相等是没有意义的。(这意味着什么?它将完成什么?)

因此,为了拥有与Python相同的情况,让我们将所有值都放在指针后面,这样所有变量都是指针。(有一个在创建的指针型“新”功能的许多围棋图书馆公约;和方法也对指针类型进行操作,所以这与该公约相兼容。)然后(如果ab是指针)a == b在围棋会比较两个这样的指针的指针相等性;并且您可以*a == *b用来比较基础值(如果它们具有可比性)。

Go还具有几种非指针引用类型:切片,映射,函数和通道。通道==是否相同,可比较使用。但是,无法对切片,地图和函数进行比较。虽然有可能使用反射。


查看完整回答
反对 回复 2021-05-10
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我不确定您想要什么。是关于变量的相等性还是变量值的标识。该答案针对第二个答案(“ 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)

c == b是足以使改变ca改变ba的条件


查看完整回答
反对 回复 2021-05-10
?
慕神8447489

TA贡献1780条经验 获得超1个赞

在非接口和非函数类型的情况下,可以比较指针是否相等。非指针类型不能共享实例OTOH。


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信