区块链技术语言(二十六):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语言字典》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

疯狂科学家大本营

疯狂科学家大本营

Bei Er Fei Ao Er / 本书翻译组 译、黄晓庆 周宇煜 张为民 审译 / Science Press / 2012-1-5 / 48.00元

美国最棒的创意工场不是贝尔实验室,不是硅谷,也不是麻省理工学院的媒体实验室,而是由五角大楼领导的绝密军事机构DARPA——国防高级研究计划局。DARPA是由美国前总统艾森豪威尔建立的军事部门,创建的目的是为了回应苏联的太空计划。 虽然DARPA属于政府机构,但是没有冷冰 冰的氛围和官僚做派,那里的科学家偏爱牛仔裤和运动鞋。不过他们最爱的还是在各个领域寻找颠覆性创意。从航空航天、IT,到能源领......一起来看看 《疯狂科学家大本营》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换