Go语言的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等,这些运行时错误会引起宕机。
一般情况下,系统宕机时,系统会停止执行,并开始执行延迟操作。
由于Go语言不支持try catch finally的操作,可以用panic和recover来模拟相关操作
模拟时需要使用defer关键词,充当finally的效果。(需要说明的是,多个defer的执行顺序为倒序,既后出现的defer语句先执行)
下面是模拟try catch的具体示例
import (
"fmt"
)
// 用panic 和 recover来模拟 try catch finally
func main() {
fmt.Println("start main")
defer recoverDefer()//必须通过defer延迟的方式来捕获panic
panic("test panic")//程序宕机 ,类似于throw exception
fmt.Println("end main")//无法执行
}
//有点类似于finally
func recoverDefer() {
fmt.Println("start recover")
if err :=recover(); err !=nil {
//do something
fmt.Println(err)
}
fmt.Println("end recover")
}
运行结果:
start main
start recover
test panic
end recover