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

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

如何在 golang 中使用運(yùn)行時(shí)錯(cuò)誤?

如何在 golang 中使用運(yùn)行時(shí)錯(cuò)誤?

Go
胡說(shuō)叔叔 2021-07-10 14:03:46
我正在嘗試從 3 個(gè)服務(wù)器下載一些東西。我的想法是如果第一臺(tái)服務(wù)器關(guān)閉,它將使用第二臺(tái)服務(wù)器。我注意到,如果第一臺(tái)服務(wù)器已經(jīng)關(guān)閉,它會(huì)創(chuàng)建一個(gè)運(yùn)行時(shí)錯(cuò)誤。我想知道如何使用這個(gè)錯(cuò)誤,我需要的是這樣的:if run time err!=nil{do something}我是 golang 的新手,希望有人能幫助我,謝謝
查看完整描述

2 回答

?
慕碼人8056858

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

為了詳細(xì)說(shuō)明 FUZxxl 的解釋,go 區(qū)分了錯(cuò)誤(可能出錯(cuò)的事情確實(shí)出錯(cuò)了)和異常(不可能出錯(cuò)的事情實(shí)際上出錯(cuò)了)。


區(qū)別有時(shí)可能很微妙(因?yàn)樗蕾囉凇耙馔狻保?,但它也可能比您在其他語(yǔ)言中看到的“一切都是例外”更清晰。


例如,考慮可能溢出的整數(shù)。一種可能性是將其視為“正?!毙袨?,應(yīng)適當(dāng)處理:


func safe_add(x, y uint32) (uint32, error) {

    z := x + y

    if z < x || z < y {

        return 0, fmt.Errorf("Integer overflow")

    }

    return z, nil

}

另一個(gè)是考慮它“永遠(yuǎn)不會(huì)發(fā)生”,并panic在萬(wàn)一發(fā)生時(shí)在不太可能的情況下運(yùn)行運(yùn)行時(shí):


func panic_add(x, y uint32) uint32 {

    z, err := safe_add(x, y)

    if err != nil {

        panic(err)

    }

    return z

}

(請(qǐng)注意,我在這里使用了我自己的“safe_add”,但您當(dāng)然不必這樣做)


主要區(qū)別在于您之后處理錯(cuò)誤的方式。添加一個(gè)數(shù)字到它自己直到它溢出errors 給出:


func safeloop(u uint32) {

    var err error

    for {

        if u, err = safe_add(u, u); err != nil {

            fmt.Println(err)

            return

        } else {

            fmt.Println(u)

        }

    }

}

處理恐慌時(shí)使用recover內(nèi)置函數(shù):


func panicloop(u uint32) {

    defer func() {

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

            fmt.Println(err)

        }

    }()

    for {

        u = panic_add(u, u)

        fmt.Println(u)

    }

}

(操場(chǎng)上的完整示例)


請(qǐng)注意,恐慌版本有一個(gè)更簡(jiǎn)單的循環(huán),因?yàn)槟旧蠌牟黄谕魏五e(cuò)誤并且從不檢查錯(cuò)誤。與此相反的是,處理恐慌的方法非常麻煩,即使是這樣一個(gè)非常簡(jiǎn)單的例子。您defer是一個(gè)函數(shù),它會(huì)recover在錯(cuò)誤出現(xiàn)并脫離函數(shù)時(shí)調(diào)用并捕獲錯(cuò)誤。當(dāng)你的代碼變得更復(fù)雜,跟蹤確切位置/恐慌是如何產(chǎn)生并作用于它因此可以成為很多比他們可能出現(xiàn)的地方檢查錯(cuò)誤,與更復(fù)雜result, err := func_which_may_fail(...)的圖案。


您甚至可以在恐慌之間交替,恢復(fù)哪些返回錯(cuò)誤,將錯(cuò)誤轉(zhuǎn)換為恐慌,......但這(可以理解)被認(rèn)為是糟糕的設(shè)計(jì)。


go 博客上有一些關(guān)于錯(cuò)誤處理和恐慌的好資源。該規(guī)范是讀的好。


在您的情況下,由于您期望“服務(wù)器已關(guān)閉”是一種非常頻繁的行為,因此您絕對(duì)應(yīng)該error按照 FUZxxl 的建議行事,但我希望這可能對(duì)您(或其他人)了解錯(cuò)誤處理的工作原理有用在去。


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

添加回答

舉報(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)