一个关于数组值比较的小测试

Go语言精选

共 909字,需浏览 2分钟

 · 2020-08-12

请问下面这个小程序输出什么?

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。因为

  1. 数组的比较是一个一个元素按照顺序比较(结构体类似,是按照一个一个字段比较),遇到不相等或者产生恐慌即结束比较。;

  2. 当比较两个具有相同不可比较动态类型(这里是func())的接口值时,将产生一个恐慌。





推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注


浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报