recover 没有捕获异常_GO语言异常处理机制panic和recover分析
本文实例分析了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语言程序设计有所帮助。
recover 没有捕获异常_GO语言异常处理机制panic和recover分析相关推荐
- 异常处理机制——panic 和 recover
Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部.一定要注意不要滥用 pa ...
- C语言异常处理机制——为您的C程序添加异常处理
C语言异常处理机制--为您的C程序添加异常处理 参考文章: (1)C语言异常处理机制--为您的C程序添加异常处理 (2)https://www.cnblogs.com/jiayu1016/archiv ...
- Go语言中使用panic和recover简化错误处理
随着使用golang越来越频繁,发现golang有一个地方非常不方便,就是在错误处理方面.先来看看golang中通常的错误处理方法: 通常的error处理 1 2 3 4 5 6 7 8 9 10 1 ...
- Go 语言踩坑记——panic 与 recover
题记 Go 语言自发布以来,一直以高性能.高并发著称.因为标准库提供了 http 包,即使刚学不久的程序员,也能轻松写出 http 服务程序. 不过,任何事情都有两面性.一门语言,有它值得骄傲的优点, ...
- Go 语言编程 — panic 和 recover
目录 文章目录 目录 defer,panic 和 recover panic recover 通过 panic + recover 来简化错误处理 defer,panic 和 recover Gola ...
- Go 学习笔记(19)— 函数(05)[如何触发 panic、触发 panic 延迟执行、panic 和 recover 的关系]
1. 异常设计思想 Go 语言的错误处理思想及设计包含以下特征: 一个可能造成错误的函数,需要返回值中返回一个错误接口( error ),如果调用是成功的,错误接口将返回 nil ,否则返回错误. 在 ...
- Golang中panic与recover的实现原理
今天我们讲讲golang中panic异常,以及recover对异常的捕获,由于panic.recover.defer之间非常亲密,所以今天就放在一起讲解,这里会涉及到一些defer的知识,有兴趣可以看 ...
- Golang的Panic和Recover
什么是 panic? 在 Go 语言中,程序中一般是使用错误来处理异常情况.对于程序中出现的大部分异常情况,错误就已经够用了. 但在有些情况,当程序发生异常时,无法继续运行.在这种情况下,我们会使用 ...
- go语言错误和异常处理,panic、defer、recover的执行顺序
一.panic()和recover() Golang中引入两个内置函数panic和recover来触发和终止异常处理流程,同时引入关键字defer来延迟执行defer后面的函数. 一直等到包含defe ...
最新文章
- 服!AI 让兵马俑“活”起来,颜值惊艳!
- DB-Engines 2018:PostgreSQL 蝉联“年度数据库”称号
- cordova指定版本_cordova 插件的安装和删除
- 系统学习NLP(二十六)--NBSVM
- catkin_make和cmake
- 投票最喜欢报表模板,赢取复联3正版玩偶
- Linux 内核源码获取
- 热释电红外传感器电路
- C++二维vector初始化
- 队列同步器(AbstractQueuedSynchronizer)(一)
- matlab中fprintf整数,matlab中fprintf函数的用法
- 论文笔记:The Effectiveness of Data Augmentation in Image Classification using Deep Learning
- USB之:MTKUSB软件框架及其MassStorage Class规范学习
- OCJP 1Z0-808考题解析 题31--60
- PyCharm选择性忽略PEP8代码风格警告信息
- Schedule(贪心,任务调度)
- SpringCloud【框架】
- Mdeditor编辑器
- Android的Google地图开发
- cocos2djs棋牌手游加密逆向,万物皆可Hook