Go语言学习路

Golang的异常处理介绍

2019-12-05  本文已影响0人  TZX_0710
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

上一篇下一篇

猜你喜欢

热点阅读