go语言中错误处理方式为:
1 | panic()-defer-recover() |
Go语言中可以使用panic()函数抛出一个错误,然后在defer中通过recover()函数捕获异常进程后续处理。
panic()
- go语言的内置函数,用于抛出错误,定义如下:
1
func panic(v interface {})
- 请注意,如果单独只使用panic()对错误进行抛出,后续程序将终止执行
defer
defer是go语言的预留关键字,用于延迟执行函数的执行。通常在资源释放、链接关闭、函数结束时调用。多个defer为堆栈结构,后进先出,并且在压栈时不能有未知变量或函数,defer
在此可用于异常抛出后的处理。
recover()
- go语言的内置函数,用于获取异常,多次调用时只有第一次能获取值,定义:
1
func recover() interface{}
示例
err1.go代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package errlab
import "fmt"
//defer recover 来处理错误
func Testerr(){
//使用defer+recover来捕获和处理异常
//匿名函数
defer func(){
err:=recover() //recover()是内置函数,可以捕获异常
if err!=nil{ //捕获到错误
fmt.Println("err=",err)
}
}()
num1:=10
num2:=0
res:=num1/num2
fmt.Println("res=",res) //err= runtime error: integer divide by zero
}main主函数:
1
2
3
4
5
6func main() {
//错误err的练习
errlab.Testerr()
fmt.Println("错误后是否会输出@!!")
}输出结果:
1
2err= runtime error: integer divide by zero
错误后是否会输出@!!从输出结果看出panic()-defer-recover()错误处理并没有影响主程序的代码
err.new()–>自定义错误类型
1 |
|