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) // falsefmt.Println(stu3 == stu4) // true
}
stu1 和 stu2 对应的类型是 *Stu,值是Stu结构体的地址,两个地址不同,因此结果为 false。
stu3 和 stu4 对应的类型是 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 的类型相同时才相等