我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Golang错误捕获Panic与Recover的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Golang错误捕获Panic与Recover的使用

一、Golang 错误是什么?

对于Go语言(Golang)的错误是通过返回值的方式,来强迫调用者对错误进行处理,要么你通过 _ 忽略,要么你处理。对于这种设计方式,我们通常需要会写大量的 if err != nil 判断。我们可以通过方法来做到校验。

这类代码非常的多,尽管工程中 error 大部分都是nil,也就是没有任何错误,但是非nil的时候,就意味着错误就出现了。
在Go语言中,使用多值返回来返回错误。Go中可以抛出一个 panic 的异常,然后在 defe r中通过 recover 捕获这个异常,然后再正常处理。

二、错误校验

1.方法

当存在错误时,我们通过方法来判断是否 panic:

func Panic(err error) {

    if err != nil {
        panic(err)
    }
}

2.判断错误

代码如下(示例):

若不采用方法

for _, c := range []string{"1", "2"} {

        atoi, err := strconv.Atoi(c)
        if err != nil {
            return
        }
        fmt.Println(atoi)
    }

若采用方法

但此时 panic 还需要我们额外处理来将错误捕获

    for _, c := range []string{"1", "2"} {

        atoi, err := strconv.Atoi(c)
        Panic(err)
        fmt.Println(atoi)
    }

三、错误捕获

1.方法

当存在错误时,我们通过recover来判断 panic 是否产生:

func RecoverError() {

    if err := recover(); err != nil {
        //输出panic信息
        fmt.Println(err)

        //输出堆栈信息
        fmt.Println(string(debug.Stack()))
    }
}

2.defer 的使用

由于我们的捕获必须在错误产生之后,那我们就必须保证捕获方法调用在错误处理方法之后,也就是通过 defer 来控制方法的最后调用 :

func main() {
    // 当使用defer 时,将会在程序内方法结算后,
    // 依照后进先出的方法执行defer内方法
    // 此时就能保证 捕获程序一定能捕获到错误
    defer RecoverError()
    for _, c := range []string{"1", "2"} {

        atoi, err := strconv.Atoi(c)
        Panic(err)

        fmt.Println(atoi)
    }

}

总结

通过以上来简单熟悉Golang 与其他语言截然不同的错误处理形式,由于其他语言开发者经常将异常与控制结构混在一起,这会很容易使得代码变得混乱。开发者也很容易滥用异常,甚至一个小小的错误都抛出一个异常。这在Golang中不被允许,Go语言也就不支持传统的 try…catch…finally 这种异常,通过新的 defer panic recover 来进行错误处理。

到此这篇关于Golang 错误捕获Panic与Recover的使用的文章就介绍到这了,更多相关Golang 错误捕获内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Golang错误捕获Panic与Recover的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go错误处理之panic函数和recover函数使用及捕获异常方法

这篇文章主要介绍了Go错误处理之panic函数使用及捕获,本篇探讨了如何使用panic和recover来处理Go语言中的异常,需要的朋友可以参考下
2023-03-24

一文带你掌握Golang中panic与recover的使用方法

这篇文章主要介绍了Golang中panic与recover的作用和使用方法,文中的示例代码讲解详细,具有一定的学习价值,需要的小伙伴可以参考一下
2023-05-18

Go之panic函数和recover函数使用及捕获异常的方法是什么

这篇文章主要介绍“Go之panic函数和recover函数使用及捕获异常的方法是什么”,在日常操作中,相信很多人在Go之panic函数和recover函数使用及捕获异常的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-07-05

Golang使用panic控制程序错误流程

这篇文章主要介绍了Golang使用panic控制程序错误流程,Golangpanic异常处理机制中的一种流程控制方式,用于中断程序流程并触发异常处理
2023-05-17

使用ShellExecuteEx并捕获标准输入/输出/错误

要使用ShellExecuteEx函数来捕获标准输入/输出/错误,你需要使用匿名管道来实现。以下是一个示例代码:```cpp#include #include #include // 函数用于创建匿名管道bool CreatePipeHan
2023-09-26

PHP接口性能优化之错误处理与异常捕获(PHP接口中错误处理与异常捕获的性能优化)

PHP接口性能优化:错误处理与异常捕获优化错误处理:启用延迟错误处理,注册自定义错误处理函数,将fatal错误转换为异常。提升异常捕获:使用try-catch块,注册自定义异常处理函数,避免过度捕获。优化技巧:谨慎使用@运算符,记录错误日志,を活用调试工具。遵循最佳实践:保持一致的错误处理策略,记录所有错误和异常,持续监控和改进。通过优化错误处理和异常捕获,可提升PHP接口性能、增强可靠性并简化故障排除。
PHP接口性能优化之错误处理与异常捕获(PHP接口中错误处理与异常捕获的性能优化)
2024-04-02

MySQL的错误处理与异常捕获方法是什么

MySQL的错误处理主要通过以下几种方法来实现:使用错误代码和消息:当MySQL执行出错时,会返回错误代码和错误消息,开发者可以根据错误代码和消息来进行错误处理。使用存储过程:开发者可以使用MySQL的存储过程来进行错误处理。在存储过程中可
MySQL的错误处理与异常捕获方法是什么
2024-04-30

await/async无法捕获与处理错误信息的解决方案分享

asyncawait中添加错误处理个人认为是有必要的,下面这篇文章主要给大家介绍了关于await/async无法捕获与处理错误信息的解决方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-02-03

c++lambda捕获this导致多线程下类释放后还在使用的错误问题

Lambda表达式是现代C++的一个语法糖,挺好用的。但是如果使用不当,会导致内存泄露或潜在的崩溃问题,这里总结下c++lambda捕获this导致多线程下类释放后还在使用的错误问题,感兴趣的朋友一起看看吧
2023-02-03

如何使用 Golang 的错误包装器?

在 golang 中,错误包装器允许你在原始错误上追加上下文信息,从而创建新错误。这可用于统一不同库或组件抛出的错误类型,简化调试和错误处理。步骤如下:使用 errors.wrap 函数将原有错误包装成新错误。新错误包含原始错误的上下文信息
如何使用 Golang 的错误包装器?
2024-05-14

使用golang的错误包装和展开机制进行错误处理

go 中的错误处理包括包装错误和展开错误。包装错误允许用一个错误类型包装另一个,提供更丰富上下文的错误。展开错误遍历嵌套错误链,找到最底层错误,便于调试。通过结合使用这两种技术,可以有效处理错误条件,提供更丰富的错误上下文和更好的调试能力。
使用golang的错误包装和展开机制进行错误处理
2024-04-25

任务监控与错误处理:Golang中使用Go WaitGroup的最佳实践

在Golang中,使用sync.WaitGroup可以方便地实现任务的并发执行和等待。以下是使用sync.WaitGroup的最佳实践:1. 创建sync.WaitGroup实例:首先,需要创建一个sync.WaitGroup实例,用于跟踪
2023-10-20

PHP框架中的错误处理机制:优雅捕获异常,保障应用稳定性

php 框架提供了异常处理机制,通过 try-catch 语句优雅地捕获错误,确保应用程序稳定性。大多数框架提供默认异常处理,捕获未处理异常并显示错误消息。自定义异常类可用于在 catch 块中执行特定处理逻辑,以增强灵活性。通过实战案例,
PHP框架中的错误处理机制:优雅捕获异常,保障应用稳定性
2024-05-23

使用中间件改善golang函数中的错误处理

使用中间件改善 go 函数中的错误处理:引入中间件的概念,它可以拦截函数调用并执行特定逻辑。创建错误处理中间件,该中间件将错误处理逻辑包装在自定义函数中。使用中间件包装处理程序函数,以便在函数调用之前执行错误处理逻辑。根据错误类型返回适当的
使用中间件改善golang函数中的错误处理
2024-04-24

golang gorm错误处理事务及日志的使用方法

这篇文章主要讲解了“golang gorm错误处理事务及日志的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang gorm错误处理事务及日志的使用方法”吧!1. 高级用法1.
2023-06-30

在主块中捕获错误后,程序会出现恐慌。恐慌:运行时错误:无效的内存地址或零指针取消引用

你在学习Golang相关的知识吗?本文《在主块中捕获错误后,程序会出现恐慌。恐慌:运行时错误:无效的内存地址或零指针取消引用》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可
在主块中捕获错误后,程序会出现恐慌。恐慌:运行时错误:无效的内存地址或零指针取消引用
2024-04-05

使用 gorm 在 postgres 中的“$1”处或附近出现 golang 语法错误

学习Golang要努力,但是不要急!今天的这篇文章《使用 gorm 在 postgres 中的“$1”处或附近出现 golang 语法错误》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都
使用 gorm 在 postgres 中的“$1”处或附近出现 golang 语法错误
2024-04-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录