Go的异常处理、异常处理机制defer、recover、panic(error)

Go语言的异常处理

Go语言的异常处理和Java、PHP语言的try…catch不一样!Go是使用内置的error来处理错误,用panicrecover来处理异常;

panic抛出异常、这个异常直接回导致程序崩溃暂停程序的执行,官方建议并发程序中慎用!

defer捕获异常、defer延迟执行、实现类似栈的”先进后出”的数据结构、一般defer后面直接和匿名函数+recover来捕获和处理异常;

recover恢复异常处理!recover必须和defer直接调用才有效,否则永远返回nil(编程陷阱)!

1
2
3
4
5
6
7
8
9
10
11
func worker() {
defer func() {
if err := recover(); err != nil {
// 日志记录堆栈信息
glog.Errorln(string(debug.Stack()))
log.Println("err:%v", err)
}
}()
panic("抛出异常、致命恐慌、会中断程序")
fmt.Println("执行不到的代码行")
}