Go语言内置错误接口类型,任何类型只要是实现了Error()string方法,都可以传递error接口类型变量。Go语言典型的错误处理方式是将error作为函数最后一个返回值。在调用函数时,通过监测其返回的error值是否为nil来进行错误处理
Go语言标准库提供的两个函数返回实现了error接口的具体类型实例,一般的错误可以使用如下两个函数进行封装,遇到复杂的错误,用户也可以自定义错误类型,只要实现error错误接口即可。
func Errorf(format string, a ...interface{}) error {
return errors.New(fmt.Sprintf(format, a...))
}
func New(text string) error {
return *errorString{text}
}
实际案例
import "fmt"
func math(x, y int) (int, error) {
if y == 0 {
return 0, fmt.Errorf("参数错误")
}
return x * y, nil
}
func main() {
// 一旦参数正确则执行相乘,并且异常值为空值
num1, err1 := math(1, 2)
if err1 == nil {
fmt.Println(num1)
}
// 一旦参数错误,则error返回错误信息
_, err2 := math(1, 0)
if err2 != nil {
fmt.Println(err2)
}
}
Go语言是一门类型安全的语言,其运行时不会出现无法捕捉的错误,也就是没有异常全是错误。
错误分两类
在实际的编程中,error和panic的使用应该遵循如下三条原则: