Go 语言 中的 空接口 在保存不同的值后,可以和其他 变量 一样使用 == 进行比较操作。
类 型 | 说 明 |
---|---|
map | 不可比较,如果比较,程序会报错 |
切片([]T) | 不可比较,如果比较,程序会报错 |
通道(channel) | 可比较,必须由同一个 make 生成,也就是同一个通道才会是 true,否则为 false |
数组([容量]T) | 可比较,编译期知道两个数组是否一致 |
结构体 | 可比较,可以逐个比较结构体的值 |
函数 | 可比较 |
两个类型相同值相同的接口比较结果为 true
package main
import (
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
// 两个类型相同值相同的接口
var intvalue1 interface{} = 1024
var intvalue2 interface{} = 1024
fmt.Println(intvalue1 == intvalue2)
}
程序运行后,控制台输出如下:
首先,我们定义了一个空接口 intvalue1 并赋值为 1024,同时定义了一个空接口 intvalue2 并赋值为 1024,接着,我们使用 == 比较这两个接口。
最后,我们发现输出的结果为 true,即,这两个类型相同值也相同的接口是相等的。
比较两个类型相同值不相同的接口结果为 false
package main
import (
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
// 比较两个类型相同值不相同的接口结果为 false
var intvalue1 interface{} = 1024
var intvalue2 interface{} = 10
fmt.Println(intvalue1 == intvalue2)
}
程序运行后,控制台输出如下:
我们定义了两个类型相同,值不同的空接口,并进行比较,结果返回了 false。
比较两个类型不同的接口结果为 false
package main
import (
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
// 比较两个类型不同的接口结果为 false
var intvalue1 interface{} = 1024
var intvalue2 interface{} = 1024.0
fmt.Println(intvalue1 == intvalue2)
}
程序运行后,控制台输出如下:
我们定义了两个空接口,一个保存了 int 类型 的值,另一个保存了 float64 类型 的值,最后,使用 == 比较这两个接口,返回 false。
空接口中的动态值不能比较
package main
import (
"fmt"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
// 空接口中的动态值不能比较
var sliceValue1 interface{} = []uint64{1024}
var sliceValue2 interface{} = []uint64{1024}
fmt.Println(sliceValue1 == sliceValue2)
}
程序运行后,控制台输出如下:
我们定义了两个空接口,都保存了切片类型的值,并且切片中的内容完全相等,最后,我们使用 == 比较这两个切片,程序报错。
即如果空接口中保存的是动态值,那么这两个空接口是不能比较的。
类型不同的空接口间的比较结果不相同,不能比较空接口中的动态值。