前幾天閱讀柴老師的高級編程广凸,發(fā)現(xiàn)了revcover幾個有意思的點拌屏,也是容易踩坑的點罚攀,其中涉及的知識點主要包含defer党觅,panic和recover雌澄。這個三個點今天主要講解的是recover,后續(xù)出現(xiàn)重頭戲是defer杯瞻,當(dāng)然镐牺,可以理解成,今天的每一個點的始作俑者都是defer魁莉,只不過使用recover先借花獻佛了睬涧。廢話不多說,開始上課啦旗唁!
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ù)時候讶请,我們甚至只需要確認下眼神,就知道panic應(yīng)該這么捕獲屎媳,大多數(shù)教材也教了大家應(yīng)該這個做《嵋纾現(xiàn)在就教點大家不用確認眼神,認真想一想剿牺,還能寫成怎么樣呢企垦?
func main() {
defer recover()
panic("this is a panic!")
}
不滿大家說,我就曾經(jīng)寫出過這么簡潔的代碼晒来,用兩行詮釋了六行代碼的行為钞诡,當(dāng)時還心想,居然能超越教材湃崩,簡直是奇才荧降,骨骼果然驚奇!
輸出呢:不貼輸出結(jié)果了攒读,直接告訴大家朵诫,沒cover住,呵薄扁!兩行淚剪返。
為啥呢?應(yīng)該defer邓梅,那為啥defer func 里面執(zhí)行revcover和defer recover 不一樣呢脱盲?
哦!下課鈴響了日缨,下節(jié)課介紹defer钱反,來公布答案!