Go语言异常处理error、panic、recover的使用
作者:吃我一个平底锅
异常处理
Go 语言引入了一个关于错误处理的标准模式,即 error 接口,它是 Go 语言内建的接口类型,该接口的定义如下:
package errors func 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。
到此这篇关于Go语言异常处理error、panic、recover的使用的文章就介绍到这了,更多相关Go语言异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!