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

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

内容简介:任何编程语言的学习都要考虑错误处理。早期的语言,比如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语言字典》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Effective JavaScript

Effective JavaScript

赫尔曼 (David Herman) / 黄博文、喻杨 / 机械工业出版社 / 2014-1-1 / CNY 49.00

Effective 系列丛书经典著作,亚马逊五星级畅销书,Ecma 的JavaScript 标准化委员会著名专家撰写,JavaScript 语言之父、Mozilla CTO —— Brendan Eich 作序鼎力推荐!作者凭借多年标准化委员会工作和实践经验,深刻辨析JavaScript 的内部运作机制、特性、陷阱和编程最佳实践,将它们高度浓缩为极具实践指导意义的 68 条精华建议。 本书共......一起来看看 《Effective JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具