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

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

我怎樣才能在 recover() 中捕獲 runtime.errorString?

我怎樣才能在 recover() 中捕獲 runtime.errorString?

Go
吃雞游戲 2023-03-21 15:39:26
我試著抓住恐慌func test(/*some input*/) (output string,err111 error) {    defer func(){        if err := recover(); err != nil {            output = ""            err111 = errors.New(err.(string))        }    }()    ....}但是 goroutine 告訴我interface conversion: interface {} is runtime.errorString, not string如何轉(zhuǎn)儲(chǔ) recover() 錯(cuò)誤并將其返回?
查看完整描述

2 回答

?
偶然的你

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

對(duì)字符串的類型斷言失敗,因?yàn)轭愋褪瞧渌愋?。該類型是一個(gè)錯(cuò)誤(它本身是一個(gè)保證 Error 方法的接口)。通常,如果需要,type switch 語句可以幫助代碼對(duì)不同的恢復(fù)響應(yīng)進(jìn)行分類。這是一個(gè)中等長度的例子。請(qǐng)注意 runtime.Error 情況不是必需的,因?yàn)?runtime.Error 滿足錯(cuò)誤。


func foo(fn func()) {

defer func() {

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

        switch e := e.(type) {

        case string:

            fmt.Println("recovered (string) panic:", e)

        case runtime.Error:

            fmt.Println("recovered (runtime.Error) panic:", e.Error())

        case error:

            fmt.Println("recovered (error) panic:", e.Error())

        default:

            fmt.Println("recovered (default) panic:", e)

        }

        fmt.Println(string(debug.Stack()))

        return

    }

    fmt.Println("no panic recovered")

}()

fn()

}


查看完整回答
反對(duì) 回復(fù) 2023-03-21
?
HUX布斯

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

您不能使用類型斷言,因?yàn)閑rrors.New(err.(string))字符串是不實(shí)現(xiàn)error接口的基礎(chǔ)類型。


所以如果你想抓住runtime.errorString恐慌。也許一種非正式的方式是使用反射,例如:


if reflect.TypeOf(err).String() == "*errors.errorString" {

    // do something

}


查看完整回答
反對(duì) 回復(fù) 2023-03-21
  • 2 回答
  • 0 關(guān)注
  • 177 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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