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

Go语言精选

共 909字,需浏览 2分钟

 ·

2020-08-12 02:06

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

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爱好者值得关注


浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报