错误处理
概述
参考:
Defer
延缓。
关键字defer
允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为return语句同样可以包含一些操作,而不是单纯地返回某个值)。
Panic
直译为恐慌
,在计算机中表示产生严重错误
当发生像数组越界或类型断言失败这样的严重错误时,会触发panic: runtime error运行时恐慌
伴随着程序的崩溃输出一个runtime.Error
接口类型的值。这个错误值有个RuntimeError()
方法用于区别普通错误。
在多层嵌套的函数调用中调用panic,可以马上终止当前函数的执行,所有的defer语句都会保证执行并把控制权交还给接收到panic的函数调用者。这样向上冒泡直到最顶层,并执行(每层的)defer,在栈顶处程序崩溃,并在命令行中用传给panic的值报告错误情况:这个终止过程就是panicking。
Recover
恢复。这个Recover
内建函数被用于从panic
或错误场景中恢复:让程序可以从panicking重新获得控制权,停止终止过程进而恢复正常执行。recover
只能在defer关键字的函数中使用,用于取得panic调用中传递过来的错误值,如果是正常执行,调用recover
会返回nil,且没有其他效果
有一个简单的 parse 包(示例 13.4)用来把输入的字符串解析为整数切片;这个包有自己特殊的 ParseError。当没有东西需要转换或者转换成整数失败时,这个包会 panic(在函数 fields2numbers 中)。但是可导出的 Parse 函数会从 panic 中 recover 并用所有这些信息返回一个错误给调用者。为了演示这个过程,在 panic_recover.go 中 调用了 parse 包(示例 13.4);不可解析的字符串会导致错误并被打印出来。
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.