處理錯誤
在 Go 中,可以從函式呼叫返回錯誤。慣例是,如果方法可能失敗,則最後返回的引數是 error
。
func DoAndReturnSomething() (string, error) {
if os.Getenv("ERROR") == "1" {
return "", errors.New("The method failed")
}
// The method succeeded.
return "Success!", nil
}
你使用多個變數賦值來檢查方法是否失敗。
result, err := DoAndReturnSomething()
if err != nil {
panic(err)
}
// This is executed only if the method didn't return an error
fmt.Println(result)
如果你對錯誤不感興趣,可以通過將其分配給 _
來忽略它。
result, _ := DoAndReturnSomething()
fmt.Println(result)
當然,忽略錯誤會產生嚴重影響。因此,通常不建議這樣做。
如果你有多個方法呼叫,並且鏈中的一個或多個方法可能返回錯誤,則應將錯誤傳播到可以處理它的第一級。
func Foo() error {
return errors.New("I failed!")
}
func Bar() (string, error) {
err := Foo()
if err != nil {
return "", err
}
return "I succeeded", nil
}
func Baz() (string, string, error) {
res, err := Bar()
if err != nil {
return "", "", err
}
return "Foo", "Bar", nil
}