zoukankan      html  css  js  c++  java
  • 区块链技术语言(二十六)——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] 
    [2] 

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/efish/p/go-language-expection-handle.html
Copyright © 2011-2022 走看看