mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-11-24 19:51:55 +00:00
ch5-4: fmt code
This commit is contained in:
@@ -10,19 +10,23 @@
|
||||
在Go的錯誤處理中,錯誤是軟件包API和應用程序用戶界面的一個重要組成部分,程序運行失敗僅被認爲是幾個預期的結果之一。
|
||||
|
||||
對於那些將運行失敗看作是預期結果的函數,它們會返迴一個額外的返迴值,通常是最後一個,來傳遞錯誤信息。如果導致失敗的原因隻有一個,額外的返迴值可以是一個布爾值,通常被命名爲ok。比如,cache.Lookup失敗的唯一原因是key不存在,那麽代碼可以按照下面的方式組織:
|
||||
```
|
||||
|
||||
```Go
|
||||
value, ok := cache.Lookup(key)
|
||||
if !ok {
|
||||
// ...cache[key] does not exist…
|
||||
// ...cache[key] does not exist…
|
||||
}
|
||||
```
|
||||
|
||||
通常,導致失敗的原因不止一種,尤其是對I/O操作而言,用戶需要了解更多的錯誤信息。因此,額外的返迴值不再是簡單的布爾類型,而是error類型。
|
||||
|
||||
內置的error是接口類型。我們將在第七章了解接口類型的含義,以及它對錯誤處理的影響。現在我們隻需要明白error類型可能是nil或者non-nil。nil意味着函數運行成功,non-nil表示失敗。對於non-nil的error類型,我們可以通過調用error的Error函數或者輸出函數獲得字符串類型的錯誤信息。
|
||||
```
|
||||
|
||||
```Go
|
||||
fmt.Println(err)
|
||||
fmt.Printf("%v", err)
|
||||
```
|
||||
|
||||
通常,當函數返迴non-nil的error時,其他的返迴值是未定義的(undefined),這些未定義的返迴值應該被忽略。然而,有少部分函數在發生錯誤時,仍然會返迴一些有用的返迴值。比如,當讀取文件發生錯誤時,Read函數會返迴可以讀取的字節數以及錯誤信息。對於這種情況,正確的處理方式應該是先處理這些不完整的數據,再處理錯誤。因此對函數的返迴值要有清晰的説明,以便於其他人使用。
|
||||
|
||||
在Go中,函數運行失敗時會返迴錯誤信息,這些錯誤信息被認爲是一種預期的值而非異常(exception),這使得Go有别於那些將函數運行失敗看作是異常的語言。雖然Go有各種異常機製,但這些機製僅被使用在處理那些未被預料到的錯誤,卽bug,而不是那些在健壯程序中應該被避免的程序錯誤。對於Go的異常機製我們將在5.9介紹。
|
||||
|
||||
Reference in New Issue
Block a user