Golang中2 个 interface 可以比较吗?
在 Go 语言中,两个接口类型的变量可以比较,但有一些规则和限制:
- nil 接口比较:两个 nil 接口值是相等的。
-
非 nil 接口比较:如果两个接口值的动态类型相同,并且动态值也相等,那么这两个接口值就被认为是相等的。
-
限制:如果接口的动态值是不可比较的类型(如切片),那么在尝试比较接口值时将会导致运行时错误。
下面是一些示例:
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
总的来说,可以比较两个接口值,但你需要确保接口的动态值是可比较的类型,否则会导致运行时错误。