page contents

2 个 interface 可以比较吗?

轩辕小不懂 发布于 2021-09-10 14:40
阅读 1154
收藏 0
分类:Golang
1907
Nen
Nen
- 程序员

Go 语言中,interface 的内部实现包含了 2 个字段,类型 T 和 值 V,interface 可以使用 == 或 != 比较。2 个 interface 相等有以下 2 种情况

两个 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

}

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

stu3 和 stu4 对应的类型是 Stu,值是 Stu 结构体,且各字段相等,因此结果为 true。

请先 登录 后评论