本文实例分析了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分析相关推荐

  1. 异常处理机制——panic 和 recover

    Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部.一定要注意不要滥用 pa ...

  2. C语言异常处理机制——为您的C程序添加异常处理

    C语言异常处理机制--为您的C程序添加异常处理 参考文章: (1)C语言异常处理机制--为您的C程序添加异常处理 (2)https://www.cnblogs.com/jiayu1016/archiv ...

  3. Go语言中使用panic和recover简化错误处理

    随着使用golang越来越频繁,发现golang有一个地方非常不方便,就是在错误处理方面.先来看看golang中通常的错误处理方法: 通常的error处理 1 2 3 4 5 6 7 8 9 10 1 ...

  4. Go 语言踩坑记——panic 与 recover

    题记 Go 语言自发布以来,一直以高性能.高并发著称.因为标准库提供了 http 包,即使刚学不久的程序员,也能轻松写出 http 服务程序. 不过,任何事情都有两面性.一门语言,有它值得骄傲的优点, ...

  5. Go 语言编程 — panic 和 recover

    目录 文章目录 目录 defer,panic 和 recover panic recover 通过 panic + recover 来简化错误处理 defer,panic 和 recover Gola ...

  6. Go 学习笔记(19)— 函数(05)[如何触发 panic、触发 panic 延迟执行、panic 和 recover 的关系]

    1. 异常设计思想 Go 语言的错误处理思想及设计包含以下特征: 一个可能造成错误的函数,需要返回值中返回一个错误接口( error ),如果调用是成功的,错误接口将返回 nil ,否则返回错误. 在 ...

  7. Golang中panic与recover的实现原理

    今天我们讲讲golang中panic异常,以及recover对异常的捕获,由于panic.recover.defer之间非常亲密,所以今天就放在一起讲解,这里会涉及到一些defer的知识,有兴趣可以看 ...

  8. Golang的Panic和Recover

    什么是 panic? 在 Go 语言中,程序中一般是使用错误来处理异常情况.对于程序中出现的大部分异常情况,错误就已经够用了. 但在有些情况,当程序发生异常时,无法继续运行.在这种情况下,我们会使用  ...

  9. go语言错误和异常处理,panic、defer、recover的执行顺序

    一.panic()和recover() Golang中引入两个内置函数panic和recover来触发和终止异常处理流程,同时引入关键字defer来延迟执行defer后面的函数. 一直等到包含defe ...

最新文章

  1. 服!AI 让兵马俑“活”起来,颜值惊艳!
  2. DB-Engines 2018:PostgreSQL 蝉联“年度数据库”称号
  3. cordova指定版本_cordova 插件的安装和删除
  4. 系统学习NLP(二十六)--NBSVM
  5. catkin_make和cmake
  6. 投票最喜欢报表模板,赢取复联3正版玩偶
  7. Linux 内核源码获取
  8. 热释电红外传感器电路
  9. C++二维vector初始化
  10. 队列同步器(AbstractQueuedSynchronizer)(一)
  11. matlab中fprintf整数,matlab中fprintf函数的用法
  12. 论文笔记:The Effectiveness of Data Augmentation in Image Classification using Deep Learning
  13. USB之:MTKUSB软件框架及其MassStorage Class规范学习
  14. OCJP 1Z0-808考题解析 题31--60
  15. PyCharm选择性忽略PEP8代码风格警告信息
  16. Schedule(贪心,任务调度)
  17. SpringCloud【框架】
  18. Mdeditor编辑器
  19. Android的Google地图开发
  20. cocos2djs棋牌手游加密逆向,万物皆可Hook

热门文章

  1. c/c++中的const
  2. 【微服务架构】SpringCloud之路由网关(zuul)
  3. LeetCode简单题之数组形式的整数加法
  4. 左神讲算法——异或的高级操作(两数交换+经典面试题)
  5. pytorch空间变换网络
  6. PyTorch 数据并行处理
  7. 2021年大数据Hive(十一):Hive调优
  8. Django celery6.4
  9. python 将一个整数变成2个字节的字符
  10. android 三级界面返回直接到一级界面