前幾天閱讀柴老師的高級(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,來公布答案!