美文网首页Go语言学习路
Golang的异常处理介绍

Golang的异常处理介绍

作者: TZX_0710 | 来源:发表于2019-12-05 10:31 被阅读0次
    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
    
    

    相关文章

      网友评论

        本文标题:Golang的异常处理介绍

        本文链接:https://www.haomeiwen.com/subject/pntdgctx.html