普通错误处理
// 包路径
package mainimport ("errors""fmt"
)func sqrt(f1, f2 float64) (float64, error) {if f2 < 0 {return 0, errors.New("error: f2 < 0")}return f1 / f2, nil
}func sqrt1(f1, f2 float64) {if re, err := sqrt(f1, f2); err == nil {fmt.Println("计算没有错误,结果为:", re)} else {fmt.Println("计算发生错误,错误信息为:", err)}
}// main方法
func main() {// 错误机制是利用多个返回值机制实现// 计算没有错误,结果为: 1sqrt1(1.1, 1.1)// 计算发生错误,错误信息为: error: f2 < 0sqrt1(1.1, -1.1)}
自定义error
package mainimport ("log"
)// 自定义异常类型
type CustomerDefinitionError struct {message string
}// 实现Error方法,用来标记是自定义错误
// err CustomerDefinitionError 只读err
// err *CustomerDefinitionError 可以修改err
func (err *CustomerDefinitionError) Error() string {return err.message
}// 注意抛出方法
func throwUDError() error {return &CustomerDefinitionError{"错误信息!!!"}
}func main() {log.Println("main ...")err := throwUDError()log.Println(err.Error())// 类型的判断if pathErr, ok := err.(*CustomerDefinitionError); ok {log.Println("This is user definition error", pathErr)}switch vt := err.(type) {case *CustomerDefinitionError:log.Println("This is user definition error", vt)default:log.Println("other type error")}log.Println("success ..")
}