【链块技术34期】区块链技术语言(二十六)——Go语言异常处理

28 篇文章 1 订阅
15 篇文章 1 订阅

原文链接 :区块链技术语言(二十六):Go语言异常处理

 

任何编程语言的学习都要考虑错误处理。早期的语言,比如C语言中的errno,不是语言规范的一部分,通常只作为一种编程范式存在。但C++语言从语言层面上增加错误处理的支持,比如异常的概念和try-catch关键字的引入。而Go语言最大的亮点之一就是拥有漂亮的错误处理规范。

一、error

 

error是Go语言内建的接口类型,它是错误处理的标准模式,定义如下:

在Go语言中,生成err值的方法有三种方式:通过errors包的New函数获得error类型的值,采用fmt.Errof 将string信息转化为error类型的信息,通过自定义实现一个error类型的值。

 1.1 通过errors包的New函数获得error类型的值

创建自定义错误最简单的方法是使用errors包中的New函数。标准库中的errors包的信息如下:

示例代码:

 

1.2 调用fmt包中的Errorf函数

另一个可以生成error类型值的方法是调用fmt包中的Errorf函数:

示例代码:

 

二、panic

如果程序出现普通错误,程序会返回一个error类型的值。但是当出现运算时把零作为除数、数组访问越界、引用空指针等操作都会引发程序出现崩溃性错误,必须调用panic,此时程序会中断运行,并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。

引发panic异常的不仅包括上面所说的引发程序出现崩溃性错误的操作,也包括直接调用内置函数——panic函数。

2.1 由引发程序致命性操作导致程序出现

panic异常

运算时把零作为除数、数组访问越界、引用空指针等操作都会引发程序出现崩溃性错误,引发panic异常。

2.2 调用panic函数引发panic异常

Go语言提供了内置函数——panic函数,直接调用该内置函数也会引发panic异常,panic函数格式如下:

注:panic函数形参是空接口,能接受任何值作为参数。

三、recover

 3.1 recover函数在程序出现panic错误

时的应用

如果程序出现的panic异常一旦被引发就会导致程序崩溃,为了让程序从运行时的panic状态中恢复,Go语言提供了内置的recover函数——“拦截”运行时的panic。它使当前的程序从运行时的panic状态中恢复并重新获得流程控制权。panic函数格式如下:

注:recover只有在defer调用的匿名函数中才有效。

3.2 recover函数在程序出现多个panic错误时的应用

a. 当主程序有多个panic,第一个panic发生时,recover函数让程序从运行时的panic状态中恢复,获得流程控制权,之后main程序结束。

b. 当延迟调用语句中有panic,捕获程序最后一个错误,也就是defer语句最先出现panic的语句。当程序遇到第一个panic,程序会调用defer语句,直到defer语句最先出现panic的语句,此时recover函数让程序从运行时的panic状态中恢复,获得流程控制权,之后main程序结束。

 

参考资料

[1] https://studygolang.com/articles/12784

[2] https://studygolang.com/articles/12785

本文完,获取更多资讯,敬请关注区块链工程师。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值