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