Go错误处理之panic函数和recover函数使用及捕获异常方法
作者:雨雨不怕雨 发布时间:2024-02-13 02:16:12
标签:go,异常,panic,recover
前言
前面我们讲过了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
0
投稿
猜你喜欢
- 1. 切片不执行越界检查和报错下面代码的输出结果将是什么?list = ['a', 'b', 'c&
- 在正文前,先简短介绍自己。我任职于广州的某个网站服务公司的系统开发员,主要任务是以.Net编写各种web系统,例如CMS.EIP。大家都知道
- 1、主题如何使用Pycahrm内置终端以及远程SSH工具。2、准备工作Pycharm版本为3.0或更高连接SSH服务器3、使用SSH客户端4
- 1. 介绍上传的图片文件:如pic = request.FILES["picture"]# pic是 <class
- 数据库连接:<% set conn=server.createobject("adodb.connection&q
- 下面文章描述可能比excel高级一点,距离backtrader这些框架又差一点。做最基础的测试可以,如果后期加入加仓功能,或者是止盈止损等功
- 函数的默认参数请勿定义可变类型经常会看到这样一句代码警告:Default argument value is mutable意思是告诉我们函
- 前言在MySQL中,并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你
- 所谓线性最小二乘法,可以理解为是解方程的延续,区别在于,当未知量远小于方程数的时候,将得到一个无解的问题。最小二乘法的实质,是保证误差最小的
- python中ftplib模块支持ftp操作,主要使用FTP类。本文使用ftp操作进行连接FTP服务器、获取当前目录文件清单、上传文件等操作
- 一,什么是mycat一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL
- 本文是mysql 数据库问题一 将表一的数据导入表二:将表一的数据导入表二:将表二中的数据 插入到 表一,表一的列对应表二 select 出
- 很久没写过东西了,今天看了chinahuman 的《用asp自动解析网页中的图片地址,并将其保存到本地服务器》,于是优化了这个程序,并且将所
- 由于psutil已更新到3.0.1版本,最新的代码如下:#!/usr/bin/env pythonimport osimport timei
- 元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也译为“盒子”)。但是不同的元素显示的方式会有所不同,例如&
- 1. 想学asyncio,得先了解协程携程的意义:计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状
- 本文实例讲述了Python实现向QQ群成员自动发邮件的方法。分享给大家供大家参考。具体实现方法如下:原理:我们需要先获取QQ群中的所有成员并
- 1.socket黏包问题原理黏包:指数据与数据之间没有明确的分界线,导致不能正确的读取数据。应用数据想要发送数据就必须将数据交给操作系统,而
- 最近跑实验,遇到了一个问题:由于实验数据集比较多,每次跑完一个数据集就需要手动更改文件路径,再将文件传到服务器,再运行实验,这样的话效率很低
- 如何用拦截表单的方法上传图片? 看下列代码:<script language="