Go语言空接口比较

Go语言空接口比较教程

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) }

程序运行后,控制台输出如下:

19_golang空接口比较.png

首先,我们定义了一个空接口 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) }

程序运行后,控制台输出如下:

20_golang空接口比较.png

我们定义了两个类型相同,值不同的空接口,并进行比较,结果返回了 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) }

程序运行后,控制台输出如下:

21_golang空接口比较.png

我们定义了两个空接口,一个保存了 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) }

程序运行后,控制台输出如下:

22_golang空接口比较.png

我们定义了两个空接口,都保存了切片类型的值,并且切片中的内容完全相等,最后,我们使用 == 比较这两个切片,程序报错。

即如果空接口中保存的是动态值,那么这两个空接口是不能比较的。

Golang空接口比较总结

类型不同的空接口间的比较结果不相同,不能比较空接口中的动态值。