一段良好的程式永遠不應該發生panic異常

weixin_34321977發表於2016-11-10

panic來自被調函式的訊號,表示發生了某個已知的bug。一段良好的程式永遠不應該發生panic異常

對於大部分程式而言,永遠無法保證能夠成功執行,因為錯誤原因往往超出程式設計師的控制範圍。任何進行io操作的程式都會面臨出錯的可能,只有無經驗的程式設計師才會相信讀寫操作不會失敗。

處理錯誤的五種策略:

1. 傳遞錯誤

response, err := http.Get(url)
    if err != nil {
        return nil, err
    }

2. 重新嘗試錯誤的操作:

對於偶然性發生的錯誤如網路請求超時、資料庫連線超時,可以進行重試,但需要限制重試的時間或次數

3. 輸出錯誤並結束程式

response, err := http.Get(url)
    if err != nil {
        fmt.Fprintf(os.Stderr, "fetch:%v\n", err)
        os.Exit(1)
    }

4. 輸出錯誤,繼續執行

if err := Ping(); err != nil {
    log.Printf("ping failed: %v; networking disabled", err)
}

5. 直接忽略錯誤

比如資料庫中一個分類刪除後,對應的分類目錄也要被刪除,但不管這個目錄是否被成功刪除,都不影響這個分類刪除的基本目的,出現這種情況,返回相應錯誤訊息供呼叫者記錄而整體結果不受影響。

相關文章