Go错误处理之panic函数和recover函数使用及捕获异常方法
作者:雨雨不怕雨 时间:2024-02-13 02:16:12
前言
前面我们讲过了error类型来处理一般的错误,本文会描述使用panic函数和recover函数来处理比较极端的错误。简单来说,当程序运行时遇到无法处理的错误或异常情况时,会调用panic
函数引发一个运行时错误,此时程序会终止执行并抛出错误信息。为了避免程序崩溃,可以使用recover
函数来捕获错误,并进行处理或恢复程序的执行,通常recover
函数写在defer
语句中。
panic函数
panic函数是内置的一个函数,他的结构如下:
func panic(v interface{})
此函数接受一个接口类型的值,这个值通常是错误的描述,调用次函数后,会引发异常,这将中止当前的程序流程,并在堆栈中记录当前的异常信息。此函数可以被主动调用,也可以在发生数组越界、空指针引用等情况下被动调用。
我们将上篇文章的除法例子进行小小的修改,使用panic进行错误处理:
package main
import (
"fmt"
)
func divide(a, b int) int{
if b == 0 {
panic("division by zero")
}
return a / b
}
func main() {
result := divide(10, 0)
fmt.Println("the result is ",result)
}
运行后,程序直接退出了,报division by zero
错误。
recover函数
有些时候,我们不希望panic函数直接粗暴的退出,这时候我们可以使用recover函数对pannic进行捕获,注意,recover函数只能写在defer关键字之后哦!
recover也是内置函数,他的结构如下:
func recover() interface{}
他能捕获到的panic函数报出的错误,并使用接口类型进行返回。
我们使用recover对例子再次修改,让程序可以继续的运行,而不是粗暴的退出,代码如下:
package main
import (
"fmt"
)
func divide(a, b int) int{
defer func() {
if err:=recover();err!=nil {
fmt.Printf("runtime panic : %v\n", err)
}
}()
if b == 0 {
panic("division by zero")
}
return a / b
}
func main() {
result := divide(10, 0)
fmt.Println("the result is ",result)
}
来源:https://blog.csdn.net/doreen211/article/details/129735009
标签:go,异常,panic,recover


猜你喜欢
pygame实现烟雨蒙蒙下彩虹雨
2023-05-07 01:19:36

python中的内置函数max()和min()及mas()函数的高级用法
2023-01-21 18:45:43

修改、删除数据记录(DELETE\\UPDATE)
2009-02-27 15:50:00
Xml Http抓取数据时乱码问题解决
2008-04-24 11:16:00
Python实现手写一个类似django的web框架示例
2022-06-18 03:17:26

JS中定位 position 的使用实例代码
2024-05-03 15:05:09
Python类装饰器实现方法详解
2021-11-15 20:01:05
python代码的几种常见加密方式分享
2021-05-19 02:14:56

使用 OpenAI API 和 Python 使用 GPT-3的操作方法
2023-10-23 20:04:05
Python和C语言利用栈分别实现进制转换
2022-10-02 15:43:15

仿vue-cli搭建属于自己的脚手架的方法步骤
2024-05-21 10:18:09
Python批量修改文件名实例操作分享
2022-04-11 06:14:47

鼠标双击滚动屏幕单击停止代码
2008-02-21 11:44:00
Python类的动态修改的实例方法
2021-07-03 12:16:15
mysql查询优化之100万条数据的一张表优化方案
2024-01-13 20:10:04
Python多进程库multiprocessing中进程池Pool类的使用详解
2022-11-22 03:21:11

python之拟合的实现
2021-09-16 19:22:12

Python unittest单元测试框架实现参数化
2022-11-01 18:29:48

python实现xml转json文件的示例代码
2023-09-29 23:52:50
速记Python布尔值
2022-04-23 10:02:17