go recover 發(fā)現(xiàn)的有意思的點(diǎn)

前幾天閱讀柴老師的高級(jí)編程,發(fā)現(xiàn)了revcover幾個(gè)有意思的點(diǎn),也是容易踩坑的點(diǎn),其中涉及的知識(shí)點(diǎn)主要包含defer,panic和recover。這個(gè)三個(gè)點(diǎn)今天主要講解的是recover,后續(xù)出現(xiàn)重頭戲是defer,當(dāng)然,可以理解成,今天的每一個(gè)點(diǎn)的始作俑者都是defer,只不過使用recover先借花獻(xiàn)佛了。廢話不多說,開始上課啦!

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

輸出

this is a panic!

看輸出也沒問題,成功捕獲了panic,這是大家經(jīng)常使用的方法。大多數(shù)時(shí)候,我們甚至只需要確認(rèn)下眼神,就知道panic應(yīng)該這么捕獲,大多數(shù)教材也教了大家應(yīng)該這個(gè)做?,F(xiàn)在就教點(diǎn)大家不用確認(rèn)眼神,認(rèn)真想一想,還能寫成怎么樣呢?

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

不滿大家說,我就曾經(jīng)寫出過這么簡(jiǎn)潔的代碼,用兩行詮釋了六行代碼的行為,當(dāng)時(shí)還心想,居然能超越教材,簡(jiǎn)直是奇才,骨骼果然驚奇!
輸出呢:不貼輸出結(jié)果了,直接告訴大家,沒cover住,呵!兩行淚。
為啥呢?應(yīng)該defer,那為啥defer func 里面執(zhí)行revcover和defer recover 不一樣呢?
哦!下課鈴響了,下節(jié)課介紹defer,來公布答案!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容