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