package main
import "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 +0x40
Process 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] 3
2019/12/05 10:28:48.781 [I] 2
2019/12/05 10:28:48.781 [I] 1
网友评论