处理错误
在 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
}