Golang 错误捕获Panic与Recover的使用
作者:头秃猫轻王 时间:2024-02-07 20:15:42
一、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)
}
}
来源:https://blog.csdn.net/moer0/article/details/123593492
标签:Golang,错误捕获,Panic,Recover


猜你喜欢
Python pickle模块常用方法代码实例
2023-12-25 03:09:16
WEB页面工具语言XML支持的工具之运用
2008-05-29 10:55:00
Go语言net包RPC远程调用三种方式http与json-rpc及tcp
2024-05-29 22:06:14

mysql 超大数据/表管理技巧
2024-01-16 22:14:05
Anaconda安装以及修改环境默认位置图文教程
2021-12-27 08:52:01

基于python if 判断选择结构的实例详解
2023-01-15 22:45:03
Python实现绘制3D地球旋转效果
2021-04-17 22:25:37

数据库疑难讲解:改善SQL Server内存管理
2009-10-29 13:30:00
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2024-01-26 05:49:49

Python 实现使用空值进行赋值 None
2021-04-12 07:01:09

Vue+Vux实现登录功能
2024-04-30 10:39:45

用css+Javascript实现扫描线效果图片
2007-11-08 19:12:00

scrapy-splash简单使用详解
2023-06-02 15:22:37

SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2024-01-18 18:22:58

Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2024-04-30 10:21:38
Python 如何展开嵌套的序列
2022-10-12 03:15:37
用VB生成DLL封装ASP代码一个例子:连接access数据库等
2008-04-07 13:06:00
python最长回文串算法
2023-03-05 02:27:37
卷积神经网络经典模型及其改进点学习汇总
2023-07-22 22:15:19

mac安装pytorch及系统的numpy更新方法
2023-08-14 19:06:15