欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go语言异常处理案例解析

程序员文章站 2022-07-05 09:54:46
异常处理 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常 golang中提供了两种处理异常的方式 一种是程序发生异常时, 将异常信...

异常处理

  • 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常
  • golang中提供了两种处理异常的方式
    • 一种是程序发生异常时, 将异常信息反馈给使用者
    • 一种是程序发生异常时, 立刻退出终止程序继续运行

打印异常信息

  • go语言中提供了两种创建异常信息的方式
  • 方式一: 通过fmt包中的errorf函数创建错误信息, 然后打印
  • 方式二: 通过errors包中的new函数创建错误信息,然后打印
  • 两种创建异常信息实现原理解析
    • go语言中创建异常信息其实都是通过一个error接口实现的
    • go语言再builtin包中定义了一个名称叫做error的接口. 源码如下
  • 在errors包中定义了一个名称叫做做errorstring的结构体, 利用这个结构体实现了error接口中指定的方法
  • 并且在errors 包中还提供了一个new方法, 用于创建实现了error接口的结构体对象, 并且在创建时就会把指定的字符串传递给这个结构体
  • fmt包中errorf底层的实现原理其实就是在内部自动调用了errors包中的new函数
  • 应用场景

中断程序

  • go语言中提供了一个叫做panic函数, 用于发生异常时终止程序继续运行
  • go语言中有两种方式可以触发panic终止程序
    • 我们自己手动调用panic函数
    • 程序内部出现问题自动触发panic函数
  • 除非是不可恢复性、导致系统无法正常工作的错误, 否则不建议使用panic

恢复程序

  • 程序和人一样都需要具备一定的容错能力, 学会知错就改. 所以如果不是不可恢复性、导致系统无法正常工作的错误, 如果发生了panic我们需要恢复程序, 让程序继续执行,并且需要记录到底犯了什么错误
  • 在go语言中我们可以通过defer和recover来实现panic异常的捕获, 让程序继续执行
  • panic注意点
    • panic异常会沿着调用堆栈向外传递, 所以也可以在外层捕获
  • 多个异常,只有第一个会被捕获
  • 如果有异常写在defer中, 那么只有defer中的异常会被捕获

到此这篇关于go语言异常处理案例解析的文章就介绍到这了,更多相关go语言异常处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!