区块链技术语言(二十六):Go语言字典

栏目: Go · 发布时间: 6年前

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

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

1

error

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

区块链技术语言(二十六):Go语言字典

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

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

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

区块链技术语言(二十六):Go语言字典

示例代码:

区块链技术语言(二十六):Go语言字典

区块链技术语言(二十六):Go语言字典

1.2 调用fmt包中的Errorf函数

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

区块链技术语言(二十六):Go语言字典

示例代码:

区块链技术语言(二十六):Go语言字典

2

panic

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

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

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

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

区块链技术语言(二十六):Go语言字典

区块链技术语言(二十六):Go语言字典

区块链技术语言(二十六):Go语言字典

2.2 调用panic函数引发panic异常

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

区块链技术语言(二十六):Go语言字典

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

区块链技术语言(二十六):Go语言字典

3

recover

3.1 recover函数在程序出现panic错误 时的应用

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

区块链技术语言(二十六):Go语言字典

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

区块链技术语言(二十六):Go语言字典

3.2 recover函数在程序出现多个panic

错误时的应用

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

区块链技术语言(二十六):Go语言字典

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

区块链技术语言(二十六):Go语言字典

原文链接:区块链技术语言(二十六):Go语言字典

参考资料

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

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

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

区块链技术语言(二十六):Go语言字典

来源:链块学院

本文由布洛克专栏作者发布,代表作者观点,版权归作者所有,不代表布洛克科技观点

——TheEnd——

关注“布洛克科技”

区块链技术语言(二十六):Go语言字典


以上所述就是小编给大家介绍的《区块链技术语言(二十六):Go语言字典》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web程序设计

Web程序设计

(美)塞巴斯塔 / 王春智、刘伟梅 / 清华大学出版社 / 2011-1 / 69.00元

《Web程序设计(第6版)》浓墨重彩地描述客户端和服务器端Web开发技术,深入分析Web站点构造和维护工具,并透彻讲解主流Web编程语言。《Web程序设计(第6版)》对上一版内容做了全面细致的修改,并融入了NetBeans 6.7、Visual Studio 8和ASP.NET Web服务等最新技术。《Web程序设计(第6版)》既可以作为高校教材,也可供专业Web编程人员参考使用。一起来看看 《Web程序设计》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试