区块链技术语言(二十六)——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

原文地址:https://www.cnblogs.com/efish/p/go-language-expection-handle.html

时间: 2024-10-08 06:32:23

区块链技术语言(二十六)——Go语言异常处理的相关文章

第10讲 | 深入区块链技术(二):P2P网络

在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素.P2P网络协议.分布式一致性算法(共识机制).加密签名算法.账户与存储模型.今天我们就来看看区块链技术的第一个核心要素:P2P网络. 如果我们简单来看P2P技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯.从文件共享到协同处理,多种领域都有它的身影出现. 同样的,P2P的网络协议也有很多,比较常见的有BitTorrent.ED2K.Gnutella.Tor等,也就是我们常说的BT工具和电驴. 比特币.以太坊等众多数字货币都实现了属于

主流区块链技术特点及Fabric V0.6&V1.0版本特点

声明:文章内容来源于网络. 一.主流区块链技术特点 二.Hyperledger的fabric V0.6总体架构: 对应的0.6版本的运行时架构: 0.6版本的架构特点是: 结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点:    架构问题:由于peer节点承担了太多的功能,所以带来扩展性.可维护性.安全性.业务隔离等方面的诸多问题,所以0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例中进行业务验证: 三.Hyperledger的fabric V

区块链技术的基本特点

区块链技术近期大热. 作为比特币和其他虚拟货币底层核心技术,区块链是一种开放的分布式分类帐本,可以有效地以可验证和永久的方式记录双方之间的交易信息,而分类帐本身也可以被编程以自动触发交易.小编带您简单了解一下区块链技术的五个原则. 区块链开发 155--0116--2665 区块链技术的五个基本特点如下: 区块链技术特点一:分布式数据库 区块链上的每一方都可以访问整个数据库及其完整的历史记录. 没有单一方控制数据或信息. 每一方都可以直接验证其交易合作伙伴的记录,而无需中间人. 区块链技术特点二

区块链扫盲:区块链技术初探(二)

?5. 共识机制 区块链是一种去中心化的分布式账本系统,由于点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致.因此区块链系统需要设计一种机制对在差不多时间内发生的事务的先后顺序进行共识.这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为"共识机制". 5.1区块链和分布式系统容错的相同点 (1) Append only. (2) 强调序列化(时间有序). (3) 少数服从多数原则. (4) 分离覆盖的问题:即长链覆盖短链区块,多节点覆盖少数节点. 5.

区块链快速入门(五)——区块链技术的演化

区块链快速入门(五)--区块链技术的演化 一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵活的合约功能,执行更为复杂的操作.引入智能合约的区块链,已经超越了单纯数据记录功能:可以为区块链加入权限管理,高级编程语言支持等,实现更强大的.支持更多商用场景的分布式账本系统.区块链技术的三种典型演化场景如下: 二.区块链技术的分类 根据参与者的不同,区块

如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取了技术架构和体系,称之为区块链技术.从比特币提取的区块链技术称之为区块链1.0时代,那个时候的应用主要以电子货币和去中心化交易为主,比如各种山寨币.而以太坊将区块链带入了2.0的时代,区块链2.0不是推翻了1.0,而是在1.0的基础上实现了区块知晓.价值知晓.图灵完备,并进行了细节优化,从而形成了以

区块链技术的比较

原文地址:https://blog.csdn.net/diannao720/article/details/53835721 开源: 名称 公识算法 适合场景 开发语言 智能合约 TPS 比特币1.0 POW 公链 C++ 否 7 以太坊ETH 1.0 POW 公链/联盟链 GO 是 25 IBM HyperLedger fabric PBFT为主 联盟链 GO 是 100K 比特股BitShare DPos 联盟链 C++ 否 500 公证通Factom Factom自有共识机制,类Pos 公

星光区块链技术

您认识区块链吗?如果我们把数据库假设成一本账本,读写数据库就可以看做一种记账的行为,区块链技术的原理就是在一段时间内找出记账最快最好的人,由这个人来记账,然后将账本的这一页信息发给整个系统里的其他所有人.这也就相当于改变数据库所有的记录,发给全网的其他每个节点,所以区块链技术也称为分布式账本(distributed ledger).联系电话:0755-23204229 区块链可以大致分成两个层面,一是做区块链底层技术;二是做区块链上层应用,即基于区块链的改造.优化或者创新应用.一:区块链的核心意

2018.12.31|区块链技术头条

元旦快乐|今日区块链技术头条 1.比特大陆裁撤全部矿场,「巨轮」早已危机暗藏? 2.加密货币和区块链的2018:行业发展回顾 3.引介 | Uniswap -- 一家不走寻常路的交易所 4.联盟链初识以及Fabric环境搭建流程 5.区块链技术指南:如何用链码实现的Hello World 6.关于比特币的炒作周期,蘑菇已经给了我们答案 7.东半仙:全是假货,没有一件真的!(百假争鸣之三十六) 8.盘点走出概念验证的区块链落地项目 9.区块链服务渐渐在全球范围内推出 华为成为区块链巨头的潜力股 1

区块链技术是怎么解决信任构建难题的?

导读 区块链技术能够解决经济活动中的信任构建难题,打造更加公开透明的营商环境.我们应善加利用,以实现诚信山东建设的大提升.大突破. 区块链技术能够解决经济活动中的信任构建难题,打造更加公开透明的营商环境.我们应善加利用,以实现诚信山东建设的大提升.大突破. 近年来,我省把社会信用体系建设作为优化营商环境的重要举措,充分发挥公共信用信息在行政管理和经济社会活动中的作用,为新旧动能转换营造了守信激励.失信惩戒的良好氛围.然而在实践中,社会信用体系建设仍存在诸多需要破解的问题,如信息数据来源的可信度问