第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從恐慌中恢復(fù)的程序未按預(yù)期退出

從恐慌中恢復(fù)的程序未按預(yù)期退出

Go
蝴蝶不菲 2022-06-27 16:57:17
據(jù)我了解,當(dāng)恐慌恢復(fù)時,我希望程序退出并表現(xiàn)出正常行為,但事實并非如此。我期望最后一行打印“程序結(jié)束”是否正確?如果出現(xiàn)運行時錯誤,它不會被打印,是嗎?package mainimport (    "fmt")func main() {    defer func() {        if r := recover(); r != nil {            fmt.Printf("Cause of panic ==>>, %q\n", r)        }    }()    f(3)    fmt.Println("End of program")}func f(x int) {    fmt.Printf("f(%d) is called.\n", x) //panic triggered when x==0    // defer called in reverse order in case of panic    defer fmt.Printf("defer %d\n", x+0/x)    f(x-1)}
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻1801條經(jīng)驗 獲得超16個贊

Go 規(guī)范很好地描述了panic/recover發(fā)生的事情??只艜K止當(dāng)前函數(shù)和所有調(diào)用者,直到程序退出。在途中,它執(zhí)行所有的延遲函數(shù)。如果其中一個函數(shù)有 arecover()并且干凈地退出,則停止恐慌傳播。


在您的情況下,恐慌按以下順序終止函數(shù):f(0), f(1), f(2), f(3), main(), 運行每個函數(shù)的延遲函數(shù)。


您的延遲函數(shù)recover()位于main(). 這意味著main()在到達 print 語句之前被恐慌中斷,并且延遲函數(shù)在之后被調(diào)用。


如果你想在 main 中捕捉恐慌、恢復(fù)并繼續(xù),你需要添加一個中間函數(shù)。例如:



func main() {

    handlePanic(3)

    fmt.Println("End of program")

}


func handlePanic(x int) {

    defer func() {

        if r := recover(); r != nil {

            fmt.Printf("Cause of panic ==>>, %q\n", r)

        }

    }()

    f(x)

}


func f(x int) {

    fmt.Printf("f(%d) is called.\n", x) //panic triggered when x==0

    // defer called in reverse order in case of panic

    defer fmt.Printf("defer %d\n", x+0/x)


    f(x-1)

}


查看完整回答
反對 回復(fù) 2022-06-27
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

不會打印“程序結(jié)束”。

當(dāng)檢測到恐慌時,導(dǎo)致恐慌的函數(shù)立即返回,以及調(diào)用該函數(shù)的函數(shù)等,一直到調(diào)用的函數(shù)recover。當(dāng)該函數(shù)返回并恢復(fù)時,程序會繼續(xù)運行,就好像沒有發(fā)生恐慌一樣。

在您的情況下,main是恢復(fù)的功能??只旁?code>f(3)調(diào)用時觸發(fā),并且在 main 返回后進行恢復(fù),繞過 println。


查看完整回答
反對 回復(fù) 2022-06-27
  • 2 回答
  • 0 關(guān)注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號