Go语言空接口比较教程
中的 在保存不同的值后,可以和其他 一样使用 == 进行比较操作。
空接口的比较特性
- 不同的空接口间的比较结果不相同
- 不能比较空接口中的动态值
空接口的比较说明
类 型 | 说 明 |
---|---|
不可比较,如果比较,程序会报错 | |
不可比较,如果比较,程序会报错 | |
可比较,必须由同一个 make 生成,也就是同一个通道才会是 ,否则为 false | |
可比较,编译期知道两个数组是否一致 | |
可比较,可以逐个比较结构体的值 | |
可比较 |
案例
比较两个类型相同值相同的接口
两个类型相同值相同的接口比较结果为 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) }
程序运行后,控制台输出如下:
我们定义了两个空接口,一个保存了 的值,另一个保存了 的值,最后,使用 == 比较这两个接口,返回 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) }
程序运行后,控制台输出如下:
我们定义了两个空接口,都保存了切片类型的值,并且切片中的内容完全相等,最后,我们使用 == 比较这两个切片,程序报错。
即如果空接口中保存的是动态值,那么这两个空接口是不能比较的。
Golang空接口比较总结
类型不同的空接口间的比较结果不相同,不能比较空接口中的动态值。