Golang的异常处理介绍

· · 1113 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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的异常处理介绍

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1113 次点击  
加入收藏 微博
下一篇:Golang并发
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传