千家信息网

Go语言中panic和recover的作用是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Go语言中panic和recover的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. panic使用介绍p
千家信息网最后更新 2026年10月31日Go语言中panic和recover的作用是什么

Go语言中panic和recover的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1. panic使用介绍

panic一旦触发之后,会按照下面的顺序来做处理:

1)panic开始的地方启动终止程序操作。

2)调用当前触发panic函数里面的defer函数。

3)返回该函数的调用方,当作异常返回来处理,所以这一步也会调用调用方函数的defer,一直到没有调用方为止。

4)打印panic的信息。

5)打印堆栈跟踪信息,也就是我们看到的函数调用关系。

6)终止程序。

例子:


结果分析:通过输出结果我们可以看出,1)2调用了panic开始了panic的操作, 3出不在执行,故没有打印。2)执行testPanic中的defer函数,输出了"testPanic exit!" 。3) 接着,返回到调用方main函数,当作异常终止,调用main中的defer函数,打印"main exit!",main中的6处代码也被跳过执行。4) 打印panic触发时的错误信息"trigger panic!" 。5)打印panic的调用堆栈信息,这里是从触发panic的点开始的,一层层往上调用。6)退出程序。

2. recover使用介绍

recover是go提供的一个用来截获panic信息,重新获取协程控制的函数。它的使用,有两点需要注意,1)recover只能在defer函数中使用。2)recover的使用必须与触发panic的协程是同一个协程才行。

例子1,同一个协程中:


结果分析:通过调用recover之后的结果来看,panic被1处的recover成功截获,只是3处到代码没有执行而已,对于调用testPanic的main函数后续代码都被执行了,"main end!"信息也被打印出来了。

例子2,panic和recover在不同协程中,不能恢复


结果分析:通过输出结果可以看出,就算我们在4处调用了rcover,但是panic也没有被截获,原因就是panic在子协程中,而recover在主协程中,recover不能跨协程截获panic信息。

3.补充知识:

对于panic显示的函数堆栈调用关系,debug.PrintStack()也可以做到,它就是用来打印函数的堆栈调用关系的, 例子如下所示:


下面是panic和recover两个函数的解释说明:https://golang.org/src/builtin/builtin.go?h=panic#L232



看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

函数 信息 结果 例子 堆栈 代码 程序 分析 输出 就是 知识 处理 帮助 作用 语言 不同 清楚 成功 两个 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 蓝思科技飞鸽互联网 科技企业和互联网企业 科技信息互联网 喔噻互联网科技 互联网科技革命 互联网高科技企业 甘肃拓世互联网科技有限公司 承德科技产业互联网发展 互联网科技项目计划书材料类 荆州市昕露互联网络科技有限公司 电子科技大学互联网创业大赛 中和天地互联网科技有限公司 华中科技大学互联网的牛人 国大互联网教育科技有限公司薪资 上海京穆互联网科技有限公司 广州百诚互联网科技有限公司官网 互联网风格科技公司名称 银川新华互联网科技学校是国营吗 悟空问答互联网科技 互联网科技有限公司 互联网扶贫科技 互联网与科技发展 科技制造互联网公司 成都玖崟互联网科技有限公司乐商圈怎么样 贵州叶脉互联网科技有限公司所属行业 中国航天科技大学国际工业互联网 中天科技中国工业互联网 城市宝互联网科技有限公司 科技互联网行业投资研究
0