Golang中2 个 interface 可以比较吗?

在 Go 语言中,两个接口类型的变量可以比较,但有一些规则和限制:

  1. nil 接口比较:两个 nil 接口值是相等的。

  2. 非 nil 接口比较:如果两个接口值的动态类型相同,并且动态值也相等,那么这两个接口值就被认为是相等的。

  3. 限制:如果接口的动态值是不可比较的类型(如切片),那么在尝试比较接口值时将会导致运行时错误。

下面是一些示例:

type Data struct {
    num int
}

var i, j interface{}
fmt.Println(i == j) // 输出:true

i = 10
j = 10
fmt.Println(i == j) // 输出:true

i = Data{num: 10}
j = Data{num: 10}
fmt.Println(i == j) // 输出:true

i = []int{1, 2, 3}
j = []int{1, 2, 3}
fmt.Println(i == j) // 运行时错误:slices can only be compared to nil

总的来说,可以比较两个接口值,但你需要确保接口的动态值是可比较的类型,否则会导致运行时错误。

发表评论

后才能评论