GO语言异常处理机制panic和recover分析
作者:shichen2014 发布时间:2024-02-18 01:58:36
本文实例分析了GO语言异常处理机制panic和recover。分享给大家供大家参考。具体如下:
Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部。一定要注意不要滥用 panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用。
golang 的错误处理流程:当一个函数在执行过程中出现了异常或遇到 panic(),正常语句就会立即终止,然后执行 defer 语句,再报告异常信息,最后退出 goroutine。如果在 defer 中使用了 recover() 函数,则会捕获错误信息,使该错误信息终止报告。
示例:
package main
import (
"log"
"strconv"
)
//捕获因未知输入导致的程序异常
func catch(nums ...int) int {
defer func() {
if r := recover(); r != nil {
log.Println("[E]", r)
}
}()
return nums[1] * nums[2] * nums[3] //index out of range
}
//主动抛出 panic,不推荐使用,可能会导致性能问题
func toFloat64(num string) (float64, error) {
defer func() {
if r := recover(); r != nil {
log.Println("[W]", r)
}
}()
if num == "" {
panic("param is null") //主动抛出 panic
}
return strconv.ParseFloat(num, 10)
}
func main() {
catch(2, 8)
toFloat64("")
}
输出如下:
2014/11/01 22:54:23 [E] runtime error: index out of range
2014/11/01 22:54:23 [W] param is null
希望本文所述对大家的GO语言程序设计有所帮助。
猜你喜欢
- 用法:mean(matrix,axis=0) 其中 matrix为一个矩阵,axis为参数以m * n矩阵举例:axis 不设置
- 目录1、系统环境,必要知识2、安装python3.6.53、安装Django4、安装uWSGI5、安装nginx6、MySQL安装配置7、编
- ASP 能快速执行你的 * 页,但你还可以通过紧缩代码和数据库连接以使它们执行更快。这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度
- 打包下载Pain.php <?php class Pain { public $var=array(); public $tpl=ar
- 一、django的模板:在settings.py的文件中可以看到并设置这个模板。1.直接映射:通过建立的文件夹(templates)和文件(
- 目的在刷算法题中经常遇到关于链表的操作,在使用go语言去操作链表时不熟悉其实现原理,目的是为了重温链表这一基础且关键的数据结构。1、链表的特
- 大家好,我是小五前一阵给大家分享了,Python如何给图片加水印。评论区就有小伙伴问,可不可使用Python去除图片水印的方法呢?这个肯定有
- replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(st
- 一、读取postgresql数据库(1)首先,我们需要安装 psycopg 驱动。通过 pip 安装最新的 psycopgpip insta
- 我就废话不多说了,直接上代码吧!#Copyright (c)2017, 东北大学软件学院学生# All rightsreserved#文件名
- 我设了两个SESSION:SESSION(A1),SESSION(A2),然后我现在想结束其中一个SESSION(如:ESEEION(A1)
- 这篇文章主要介绍了基于python实现从尾到头打印链表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 前言本人因为比较喜欢看漫画和动漫, 所以总会遇到一些问题, 因为订阅的漫画或者动漫太多, 总会忘记自己看到那一章节或者不知道什么时候更新.
- 数据格式:(polygon.txt) 里面含有2个多边形,一行是一个点 0.085, 0.834, 0.024, 0.744, 0, 0.6
- 其实r 是只读,只能读不能写,这是很明确的,但是r+是可读写,变成r+后还没太明白到底加了什么,还是照样写不了,有没有这样的体验呢,如下代码
- 方法一我常用的做法,就是在数据库中加一个删除标识字段,如: isdel=1 这样就代码删除的字段了方法二直接限制mysql删除启动MySQL
- 在这里我想有必要再较系统说一下ADO的各种对象的方法、属性。毕竟ADO不仅应用在ASP中,VB,VC都可以用到。在这十天中我想主要提到的对象
- 前言ThinkPHP 3.2 基于 ThinkPHP 3.1 的基础上有许多的变化,我觉得这个版本应该设立为 ThinkPHP 4.0 而不
- 这里假设你是通过models的ImageField上传图片,并期望在前台img标签中能显示。能否访问图片关键在于,是否能通过正确的路径访问。
- 1.Mysql的逻辑架构Mysql的逻辑架构如下所示,整体分为两部分,Server层和存储引擎层。与存储引擎无关的操作都是在Server层完