Go沒有像Java中的try / catch這樣的異常機制,我們不能在Go中拋出異常。
Go使用另一種機制,稱為延遲恐慌和恢復機制。
Go通過返回一個錯誤對象來處理函數(shù)和方法的簡單錯誤。錯誤對象可能是唯一或最后一個返回值。如果函數(shù)中沒有錯誤,則錯誤對象為nil。
無論是否收到錯誤,我們都應始終在調(diào)用語句中檢查錯誤。
我們永遠不要忽略錯誤,它可能導致程序崩潰。
Go語言檢測和報告錯誤情況的方法是
可能導致錯誤的函數(shù)將返回兩個變量:一個值和一個錯誤代碼,如果成功,則為nil;如果錯誤條件,則為== nil。
在函數(shù)調(diào)用之后檢查錯誤。如果發(fā)生錯誤( if error != nil),則停止執(zhí)行實際功能(或必要時整個程序)。
Go具有預定義的錯誤接口類型
type error interface { Error() string }
我們可以使用錯誤包中的error.New定義錯誤類型,并提供適當?shù)腻e誤消息,例如:
err := errors.New("math - 負數(shù)的平方根")
package main import "errors" import "fmt" import "math" func Sqrt(value float64) (float64, error) { if (value < 0) { return 0, errors.New("Math: 負數(shù)的平方根") } return math.Sqrt(value), nil } func main() { result, err := Sqrt(-64) if err != nil { fmt.Println(err) } else { fmt.Println(result) } result, err = Sqrt(64) if err != nil { fmt.Println(err) } else { fmt.Println(result) } }
輸出:
Math: 負數(shù)的平方根 8