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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

恐慌并從包中恢復(fù)

恐慌并從包中恢復(fù)

Go
SMILET 2021-08-16 20:12:49
我試圖弄清楚如何panic()和recover()工作..日志包package logimport (    "fmt")func Recover() {    fmt.Println("Recovering!")    if err := recover(); err != nil {        fmt.Println("Error message recovered!")    }}主包package mainimport (    "fmt"    log "www/pkg/log")func main() {    defer func() {        log.Recover()    }()    panic("Fake error!")}輸出Recovering!panic: Fake error!為什么Error message recovered!從不打印?
查看完整描述

2 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

應(yīng)用程序必須直接從延遲函數(shù)調(diào)用恢復(fù)來(lái)處理恐慌。

規(guī)范對(duì)遞延函數(shù)調(diào)用會(huì)談恢復(fù):

假設(shè)一個(gè)函數(shù) G 推遲了一個(gè)調(diào)用恢復(fù)的函數(shù) D,并且在 G 正在執(zhí)行的同一個(gè) goroutine 上的一個(gè)函數(shù)中發(fā)生了恐慌。當(dāng) deferred 函數(shù)的運(yùn)行達(dá)到 D 時(shí),D 調(diào)用 recovery 的返回值將是傳遞給調(diào)用 panic 的值。

這很微妙,但它不允許間接調(diào)用來(lái)恢復(fù)。此外,關(guān)于recover返回值的段落提到了來(lái)自延遲函數(shù)的直接調(diào)用:

如果滿足以下任一條件,recover 的返回值為 nil:

  • 恢復(fù)不是由延遲函數(shù)直接調(diào)用的。

我最近被這個(gè)問(wèn)題抓住了。因?yàn)橐?guī)范非常簡(jiǎn)潔,所以有時(shí)需要仔細(xì)閱讀才能挑出一些要點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2021-08-16
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

revocer 僅指當(dāng)前 goroutine 的執(zhí)行:文檔說(shuō):

Executing a call to recover inside a deferred function **(but not any function called by it)** stops the panicking sequence by restoring normal execution

當(dāng)你調(diào)用另一個(gè)函數(shù)時(shí),它沒(méi)有恐慌,因此在它中間調(diào)用恢復(fù)返回 nil,你沒(méi)有抓住恐慌。


查看完整回答
反對(duì) 回復(fù) 2021-08-16
  • 2 回答
  • 0 關(guān)注
  • 228 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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