go interface和nil可以比较吗?

2个 interface 比较

Go语言中,interface的内部实现包含了 2 个字段,类型 T 和 值V,interface 可以使用 == != 进行比较。

2 个 interface 相等有以下两种情况:

  • 两个 interface 均等于 nil (此时 V 和 T 都处于 unset 状态)
  • 类型 T 相同,且对应的值 V 相等。
type Stu struct {
     Name string
}

type StuInt interface{}

func main() {
     var stu1, stu2 StuInt = &Stu{"Tom"}, &Stu{"Tom"}
     var stu3, stu4 StuInt = Stu{"Tom"}, Stu{"Tom"}
     fmt.Println(stu1 == stu2) // false
     fmt.Println(stu3 == stu4) // true
}

stu1stu2 对应的类型是 *Stu,值是Stu结构体的地址,两个地址不同,因此结果为 false。

stu3stu4 对应的类型是 Stu,值是Stu结构体,且各字段相等,因此结果为True.


2个 nil 进行比较

两个 nil 并不一定相等。 interface 在运行时绑定值,只有值为 nil 接口值才为 nil ,但是与指针的 nil 不相等。:

var p *int = nil
var i interface{} = nil
if(p == i){
	fmt.Println("Equal")
}

两者并不相同,只有两个 nil 的类型相同时才相等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值