Golang中异常处理机制详解


Posted in Golang onJune 08, 2021

前言

通常我们需要编写好的错误处理方式,在了避免某些程序员滥用异常,于是Go这里直接把异常这一块给砍掉了,最终还是通过返回值来判断程序的异常情况,毕竟Go可是支持多返回值的语言,比如atoi、itoa等函数,就不能忽略它的第二个返回值,因为第二个返回值代表了转换是否成功!不过Golang还是提供了一些错误处理机制的

Golang中异常处理机制详解

Go的错误机制

1、没有异常机制

2、error类型实现了error接口

3、可以通过errors.New来快速创建错误实例

type error interface{
    Error() string
}

error.New("n must be in range[0, 1]")

Golang中异常处理机制详解

但是这样做只是给开发者标识,Code怎么认识呢?难道去string里判断吗?当然不是,可以预定义一些错误:

Golang中异常处理机制详解

处理错误最佳实践

1、预定义错误,code里判断

2、及早失败,避免嵌套

panic与recover

panic用于不可恢复的错误,类似于Java的Error
panic退出前会执行defer指定的内容

panic和os.Exit
os.Exit退出时不会调用defer指定的函数
os.Exit退出时不会输出当前调用栈信息

Golang中异常处理机制详解

接下来看看recover

在Java中如果你不知道要抛出什么错误,于是乎很多人直接来个Catch Throwable,作为一个异常无Fack说,C++中是直接catch…作为一个异常无Fack说

Golang中异常处理机制详解

在Go语言中可以通过defer定义的函数去执行一些错误恢复的行为

Golang中异常处理机制详解

很多人容易在defer处理错误时把recover获得的错误对象打印到日志文件中,这是一种非常危险的做法,一定要当心recover在做的事情,因为recover的时候并不去检测到底发生了什么错误,而是直接忽略了这个错误,那么如果这个时候系统的核心资源消耗完了,如果我们强制性的恢复的话系统仍然是不能正常工作的,还会导致我们的健康检查程序没办法检查出当前系统的问题,因为很多的health check只是检查进程在还是不在,因为我们的进程是在的,所以会导致僵尸服务进程,虽然活着但是无法正常提供服务。于是我们可以采用恢复设计模式中的一种叫做Let it Crash ,health check进程就会帮我们重启这个服务

Golang中异常处理机制详解

总结

到此这篇关于Golang中异常处理机制的文章就介绍到这了,更多相关Golang异常处理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
Go语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
golang 实现菜单树的生成方式
Apr 28 Golang
golang 如何通过反射创建新对象
Apr 28 Golang
golang 在windows中设置环境变量的操作
Apr 29 Golang
goland设置颜色和字体的操作
May 05 Golang
go设置多个GOPATH的方式
May 05 Golang
Go 自定义package包设置与导入操作
May 06 Golang
解决golang 关于全局变量的坑
May 06 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
golang为什么要统一错误处理
Apr 03 Golang
Go语言测试库testify使用学习
Jul 23 Golang
Go语言实现Snowflake雪花算法
Jun 08 #Golang
go语言中http超时引发的事故解决
Jun 02 #Golang
Golang二维数组的使用方式
May 28 #Golang
Golang标准库syscall详解(什么是系统调用)
May 25 #Golang
go 实现简易端口扫描的示例
May 22 #Golang
go xorm框架的使用
May 22 #Golang
Golang实现AES对称加密的过程详解
May 20 #Golang
You might like
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
基于jquery的超简单上下翻
2010/04/20 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
原生js实现分页效果
2020/09/23 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
Python程序语言快速上手教程
2012/07/18 Python
python入门教程之识别验证码
2017/03/04 Python
Python内置模块turtle绘图详解
2017/12/09 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
国庆节文艺活动方案
2014/02/03 职场文书
婚庆司仪主持词
2014/03/15 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
企业员工集体活动方案
2014/08/17 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
市场营销计划书
2015/01/17 职场文书
英文商务邀请函范文
2015/01/31 职场文书
教育教学读书笔记
2015/07/02 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书