一个关于数组值比较的小测试
请问下面这个小程序输出什么?
package main
func compare(a, b T) {
defer func() {
if recover() != nil {
print("panic")
}
}()
print(a == b)
}
type T [2]interface{}
func main() {
f := func() {}
compare(T{1, f}, T{2, f})
compare(T{f, 1}, T{f, 2})
}
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓↓(解释见下面)
↓↓↓↓↓(解释见下面)
↓↓↓↓(解释见下面)
↓↓↓(解释见下面)
↓↓(解释见下面)
↓(解释见下面)
答案:打印出 falsepanic。因为
数组的比较是一个一个元素按照顺序比较(结构体类似,是按照一个一个字段比较),遇到不相等或者产生恐慌即结束比较。;
当比较两个具有相同不可比较动态类型(这里是func())的接口值时,将产生一个恐慌。
推荐阅读
站长 polarisxu
自己的原创文章
不限于 Go 技术
职场和创业经验
Go语言中文网
每天为你
分享 Go 知识
Go爱好者值得关注
评论