package mainimport "github.com/astaxie/beego/logs"func main() { //关于Golang的异常处理方式说明 //1.关键词 panic 2.recover 3.defer函数 //panic 的作用是抛出一个错误信息 可以看作是Java中的throws new Exception //panic 调用完程序会立即停止 后续程序不会再执行 //demo1. var number=10 if number==10{ panic("错误信息") } logs.Info("程序结束")}//========打印结果===========panic: 错误信息goroutine 1 [running]:main.main() D:/golang_example/example/deferExample.go:13 +0x40Process finished with exit code 2//========打印结果===========我们可以看到控制台只打印了程序结束 但是并未 继续往下之后 //demo2. 使用 recover捕获异常 注:recover必须定义在panic错误之前处理Demo()logs.Info("程序结束")//定义一个函数供调用 函数里面使用panic抛出异常 使用defer 处理异常func Demo(){ defer func() { if err:=recover();err!=nil{ logs.Info("捕获异常") } }() var number=10 if number==10{ panic("错误信息") } fmt.Println("程序结束")}可以看到 方法demo中出现了异常 recover 处理了异常,程序最后输出了 程序结束 并不会直接中断//========打印结果===========2019/12/05 09:59:42.663 [I] 捕获异常2019/12/05 09:59:42.682 [I] 程序结束//========打印结果===========//demo3. 关于defer 函数我们可以看到 刚才的recover当中使用了该函数// 1.defer 语句会将其后面跟随的语句进行延迟处理,defer logs.Info("Test Aline")logs.Info("程序结束")//========打印结果===========2019/12/05 10:26:50.579 [I] 程序结束2019/12/05 10:26:50.594 [I] Test Aline//========打印结果===========// 2.在 defer 归属的函数即将返回时,将延迟处理的语句按// defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。//多个 defer函数 的执行顺序出去的时候顺序是按照LIFO的方式进出 第一个被放进去的 一定是最后一个出来的func DeferExample(){ defer logs.Info(1) defer logs.Info(2) defer logs.Info(3)}2019/12/05 10:28:48.767 [I] 32019/12/05 10:28:48.781 [I] 22019/12/05 10:28:48.781 [I] 1