异常处理
error接口:
error是一个接口,该接口只声明了一个方法Error(),返回值是string类型,用以描述错误信息。
func main() {
err := errors.New("这是一个错误")
fmt.Printf("%T,%v\n", err, err) // *errors.errorString,这是一个错误
err2 := err.Error()
fmt.Printf("%T,%v\n", err2, err2) // string,这是一个错误
}
panic错误:
panic返回一个让程序崩溃的错误(数组访问越界、空指针引用等)
发生panic异常,已注册的defer会继续正常执行
recover:
recover可以用来拦截panic,只能在defer中的匿名函数中使用。recover拦截后panic异常不影响,其他函数。
recover的返回值是panic错误信息
func main() {
fmt.Println(1)
demo14()
fmt.Println(2)
}
func demo14() {
defer fmt.Println(3)
defer func() {
a:=recover()
fmt.Println(a)
}()
defer fmt.Println(4)
fmt.Println(5)
panic("panic")
fmt.Println(6)
}
// 1 5 4 panic 3 2