【Go学习】GO语言异常处理机制panic和recover分析
Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部。一定要注意不要滥用 panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用。
golang 的错误处理流程:当一个函数在执行过程中出现了异常或遇到 panic(),正常语句就会立即终止,然后执行 defer 语句,再报告异常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函数,则会捕获错误信息,使该错误信息终止报告。
示例:
1 package main
2
3 import (
4 "fmt"
5 )
6
7 func main() {
8 f()
9 fmt.Println("Returned normally from f.")
10 }
11
12
13 func f() {
14 fmt.Println("Calling g.")
15 g()
16 fmt.Println("Returned normally from g.")
17 }
18
19 func g() {
20 panic("ERROR")
21 }
22
运行结果:
Calling g.
panic: ERROR
goroutine 1 [running]:
main.g()
/home/james_xie/work/golangstudy/integer.go:20 +0x39
main.f()
/home/james_xie/work/golangstudy/integer.go:15 +0x70
main.main()
/home/james_xie/work/golangstudy/integer.go:8 +0x22
exit status 2
上面函数的函数g中的panic("ERROR")
语句导致程序panic,正常语句就会立即终止&