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语言程序设计有所帮助。
相关推荐
-
利用golang实现封装trycatch异常处理实例代码
前言 社区不少人在谈论 golang 为毛不用trycatch模式,而采用苛刻的recovery.panic.defer组合-. 从网上整了一个trycatch包,感觉不错,拿出来分享下-下面话不多说,来一起看看详细的介绍. 示例代码 package main import ( "reflect" ) type TryCatch struct { errChan chan interface{} catches map[reflect.Type]func(err error) d
-
GO语言异常处理机制panic和recover分析
本文实例分析了GO语言异常处理机制panic和recover.分享给大家供大家参考.具体如下: Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部.一定要注意不要滥用 panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用. golang 的错误处理流程:当一个函数在执行过程中出现了异常或遇到 panic(),正常语句就会立即终止,然后执行 d
-
C语言异常处理机制案例讲解
异常处理机制:setjmp()函数与longjmp()函数 C标准库提供两个特殊的函数:setjmp() 及 longjmp(),这两个函数是结构化异常的基础,正是利用这两个函数的特性来实现异常. 所以,异常的处理过程可以描述为这样: 首先设置一个跳转点(setjmp() 函数可以实现这一功能),然后在其后的代码中任意地方调用 longjmp() 跳转回这个跳转点上,以此来实现当发生异常时,转到处理异常的程序上,在其后的介绍中将介绍如何实现. setjmp() 为跳转返回保存现场并为异常提供处理
-
Go语言异常处理(Panic和recovering)用法详解
目录 基本语法 Panic Recover 示例一:recover()使用方法 实例二:panic()使用方法 基本语法 异常处理是程序健壮性的关键,往往开发人员的开发经验的多少从异常部分处理上就能得到体现.如何适度的添加异常,往往是整个产品体验成败的关键. Go语言中没有Try Catch Exception机制,但是提供了panic-and-recover机制. Panic 内置函数panic() 类似raise,能够停止正常的流程 当函数内调用panic,正常的流程将被终止,defer函数
-
Jersey框架的统一异常处理机制分析
一.背景 写这边文章源于有朋友问过java中的checked exception和unchecked exception有啥区别,当时我对其的回答是:我编程时仅用RuntimeException.其实,我说句话我是有前提的,确切的应该这么说:在成熟的开发框架下编写业务代码,我只使用或关注RuntimeException.因为,由于框架往往将异常的处理统一封装,这样以便程序员更好的关注业务代码,而业务的一些错误通常是在系统运行期间发生的,因此业务的异常通常被设计为RuntimeException的
-
Java SpringMVC拦截器与异常处理机制详解分析
目录 拦截器(interceptor)的作用 拦截器快速入门 案例:用户登录权限控制 拦截器方法说明 SpringMVC异常处理 异常处理的思路 异常处理两种方式 拦截器(interceptor)的作用 Spring MVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain).在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用.拦截器也是AOP思
-
Struts2中异常处理机制分析
因为在Action的execute方法声明时就抛出了Exception异常,所以我们无需再execute方法中捕捉异常,仅需在struts.xml 中配置异常处理. 为了使用Struts2的异常处理机制,必须打开Struts2的异常映射功能,这需要exception拦截器.在struts-default.xml文件中已经开启了exception拦截器. 声明式异常捕捉 Struts2的异常处理机制是通过在struts.xml文件中配置<exception-mapping--/>元素完成的,配置
-
go语言的panic和recover函数用法实例
Golang 有2个内置的函数 panic() 和 recover(),用以报告和捕获运行时发生的程序错误,与 error 不同,panic-recover 一般用在函数内部.一定要注意不要滥用 panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用. golang 的错误处理流程:当一个函数在执行过程中出现了异常或遇到 panic(),正常语句就会立即终止,然后执行 defer 语句,再报告异常信息,最后退出 goroutine.如果在 defer 中使用了 re
-
Golang中异常处理机制详解
前言 通常我们需要编写好的错误处理方式,在了避免某些程序员滥用异常,于是Go这里直接把异常这一块给砍掉了,最终还是通过返回值来判断程序的异常情况,毕竟Go可是支持多返回值的语言,比如atoi.itoa等函数,就不能忽略它的第二个返回值,因为第二个返回值代表了转换是否成功!不过Golang还是提供了一些错误处理机制的 Go的错误机制 1.没有异常机制 2.error类型实现了error接口 3.可以通过errors.New来快速创建错误实例 type error interface{ Error(
-
深入理解golang的异常处理机制
前言 众所周知在java或php等很多面向对象的语言中, 异常处理是依靠throw.catch来进行的.在go语言中,panic和recover函数在作用层面分别对等throw和catch语句,当然也存在不同之处.下面话不多说,来一起看看详细的介绍吧. 从设计层面来看,panic和recover函数适用于那些真正的异常(例如整数除0),而throw catch finally机制常常被用来处理一些业务层面的自定义异常.因此在go语言中,panic和recover要慎用. 上述两种异常机制的使用中
-
Go语言异常处理案例解析
异常处理 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常 golang中提供了两种处理异常的方式 一种是程序发生异常时, 将异常信息反馈给使用者 一种是程序发生异常时, 立刻退出终止程序继续运行 打印异常信息 Go语言中提供了两种创建异常信息的方式 方式一: 通过fmt包中的Errorf函数创建错误信息, 然后打印 package main import "fmt" func main() { // 1.创建错误信息 var err error =
随机推荐
- SQL2005 高效分页sql语句
- MongoDB的创建、更新和删除
- jQuery Tree Multiselect使用详解
- JS 屏蔽按键效果与改变按键效果的示例代码
- Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
- webregexp 正则测试实现代码
- 基于java涉及父子类的异常详解
- JavaScript实现统计文本框Textarea字数增强用户体验
- PHP通过iconv将字符串从GBK转换为UTF8字符集
- asp textarea 多行数组分割处理方法
- Android实战教程第四篇之简单实现短信发送器
- Django中URL视图函数的一些高级概念介绍
- HTML5 拖拽复制功能的实现
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- CMD下的网络安全配置方法
- 微信小程序 解决swiper不显示图片的方法
- Android Uri和文件路径互相转换的实例代码
- JQuery中ajax方法访问web服务实例
- jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
- C++实现八皇后问题的方法