go recover 发现的有意思的点

2020-06-06  本文已影响0人  7赢月

前几天阅读柴老师的高级编程,发现了revcover几个有意思的点,也是容易踩坑的点,其中涉及的知识点主要包含defer,panic和recover。这个三个点今天主要讲解的是recover,后续出现重头戏是defer,当然,可以理解成,今天的每一个点的始作俑者都是defer,只不过使用recover先借花献佛了。废话不多说,开始上课啦!

func main()  {
    defer func() {
        if r := recover();r != nil{
            fmt.Println(r)
        }
    }()
    panic("this is a panic!")
}

输出

this is a panic!

看输出也没问题,成功捕获了panic,这是大家经常使用的方法。大多数时候,我们甚至只需要确认下眼神,就知道panic应该这么捕获,大多数教材也教了大家应该这个做。现在就教点大家不用确认眼神,认真想一想,还能写成怎么样呢?

func main()  {
    defer recover()
    panic("this is a panic!")
}

不满大家说,我就曾经写出过这么简洁的代码,用两行诠释了六行代码的行为,当时还心想,居然能超越教材,简直是奇才,骨骼果然惊奇!
输出呢:不贴输出结果了,直接告诉大家,没cover住,呵!两行泪。
为啥呢?应该defer,那为啥defer func 里面执行revcover和defer recover 不一样呢?
哦!下课铃响了,下节课介绍defer,来公布答案!

上一篇下一篇

猜你喜欢

热点阅读