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)。

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)有抓住恐慌。
- 2 回答
- 0 關(guān)注
- 228 瀏覽
添加回答
舉報(bào)