异常处理
Go 语言引入了一个关于错误处理的标准模式,即 error 接口,它是 Go 语言内建的接口类型,该接口的定义如下:
package errorsfunc New(text string) error {return &errorString{text}
}// errorString is a trivial implementation of error.
type errorString struct {s string
}func (e *errorString) Error() string {return e.s
}
- 通过fmt包进行使用errorf接口
- 通过自带的errors包进行调用
常用在我们对检测程序是否正常
panic
在通常情况下,向程序使用方报告错误状态的方式可以是返回一个额外的 error 类型值。
但是,当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起 painc 异常。在一般情况下,我们不使用 panic 函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时,就调用panic。
一般而言,当 panic异常发生时,程序会中断运行,并立即执行在该 goroutine(可以先理解成线程,在中被延迟的函数(defer机制)。随后,程序崩溃并输出日志信息。日志信息包括 panic value 和函数调用的堆栈跟踪信息。
不是所有的 panic 异常都来自运行时,直接调用内置的 panic 函数也会引发 panic 异常: panic函数接受任何值作为参数。
func panic(v interface{})
直接调用panic函数
直接调用内置的 panic 函数也会引发 panic 异常。
数组越界导致panic
recover
运行时 panc 异常一旦被引发就会导致程序崩溃。Go语言为我们提供了专用于“拦截”运行时 panic 的内建所数–recover。它可以是当前的程序从运行时 panic 的状态中恢复并重新获得流程控制权。
fune recover()interface{}
注意:recover只有在defer调用的所数中有效。
如果调用了内置函数recover,并且定义该 defer 语句的函数发生了 panic 异常,recover 会使程序从 panic 中恢复,并返回 panic value。导致panic 异常的函数不会继续运行,但能正常返回。在未发生 panic 时调用recover,recover 会返回 nil。