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 的类型相同时才相等

你可能感兴趣的:(go语言,golang,开发语言,后端)