Golang错误捕获Panic与Recover的使用
来源:脚本之家
时间:2022-12-23 14:14:13 257浏览 收藏
怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Golang错误捕获Panic与Recover的使用》,涉及到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的资料请关注golang学习网公众号!
-
394 收藏
-
192 收藏
-
339 收藏
-
446 收藏
-
485 收藏
-
202 收藏
-
199 收藏
-
145 收藏
-
168 收藏
-
165 收藏
-
473 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 魔幻的灰狼
- 这篇文章内容太及时了,太细致了,感谢大佬分享,已加入收藏夹了,关注师傅了!希望师傅能多写Golang相关的文章。
- 2023-05-23 06:09:13
-
- 爱撒娇的小笼包
- 太细致了,码起来,感谢大佬的这篇技术文章,我会继续支持!
- 2023-02-08 17:47:08
-
- 天真的故事
- 写的不错,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢大佬分享技术文章!
- 2023-02-02 21:44:38
-
- 高兴的太阳
- 这篇技术文章真是及时雨啊,作者大大加油!
- 2023-01-29 03:08:27
-
- 时尚的铅笔
- 这篇技术贴太及时了,很详细,赞 👍👍,mark,关注博主了!希望博主能多写Golang相关的文章。
- 2023-01-17 01:50:27
-
- 受伤的棒棒糖
- 很棒,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢up主分享技术文章!
- 2023-01-13 14:47:27
-
- 激昂的老师
- 太详细了,已收藏,感谢up主的这篇文章,我会继续支持!
- 2023-01-12 09:47:32
-
- 眯眯眼的雪糕
- 这篇文章真是及时雨啊,很详细,很好,mark,关注师傅了!希望师傅能多写Golang相关的文章。
- 2023-01-12 08:41:01
-
- 玩命的砖头
- 太详细了,已加入收藏夹了,感谢博主的这篇技术文章,我会继续支持!
- 2023-01-09 13:33:21
-
- 粗暴的小松鼠
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢老哥分享文章内容!
- 2023-01-05 00:39:39
-
- 含糊的日记本
- 这篇技术文章真及时,太全面了,赞 👍👍,已收藏,关注作者了!希望作者能多写Golang相关的文章。
- 2023-01-01 14:20:05