文档章节

go语言中异常处理 defer、panic、recover

别人说我名字很长
 别人说我名字很长
发布于 2014/05/23 16:47
字数 389
阅读 596
收藏 4
defer是在函数最后执行,相当于析构函数。比如

func test() {
	fmt.Println("fefer执行的")
}
func main() {
	defer test()
	fmt.Println("这一句先执行,在函数最后执行defer")
}



我们看到在main函数中不管defer在哪一行,都是最后执行的,理解为析构函数算了

panic 终止执行,抛出错误,在panic后,下面的代码不执行了,直接去执行defer的代码,然后defer里的recover可以捕获错误

recover 接收panic抛出的错误,都是放到defer中捕获错误的,下面来个小例子

func gotest() {
	fmt.Println("aaa")
	if err := recover(); err != nil {
		fmt.Println(err)
	}
	fmt.Println("xxx")
}

//用户登陆
func (this *UserController) Login() {
	defer gotest()
	fmt.Println("...")
	panic("抛出错误")
	fmt.Println("在panic后面的不显示")
}



我们访问用户登陆方法 Login时,首先每行是defer gotest(),表示析构函数是gotest(),最后执行
然后看第二行输出...这个应该是最先执行的
第三行遇到了panic("抛出错误"),这里后面的就不执行了,到此停止,去执行析构函数gotest(),

然后在gotest函数中第一行打印fmt.Println("aaa")
第二行发现了recover,这里recover可以捕获到panic中的错误,如果捕获到就打印fmt.Println(err)

嘿嘿,看来挺容易理解的嘛,还有一点要注意的是,recover中有在defer中才能捕获错误,还有一点就是,如果有多个defer的话,是最后一个先执行,倒序执行


© 著作权归作者所有

上一篇: thinkphp的F方法
下一篇: nodejs安装使用
别人说我名字很长
粉丝 58
博文 265
码字总数 113728
作品 0
济南
程序员
私信 提问
golang捕获异常

Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,...

吴之恒心
2017/03/01
0
0
golang学习的点点滴滴:异常处理 defer, panic, recover

Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,...

亓斌哥哥
2014/09/29
88
0
Go的异常处理 defer, panic, recover

Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,...

blacklovebear
2014/02/09
82
0
Golang 异常处理机制——defer, error, panic, recover

一、前言 在实际的项目中,对于异常的最佳实践很多,在使用不同的语言开发不同类型的程序时,有不同的建议。Google C++ Style 中提到 Google 内部的 C++ 代码中不使用异常,社区也有很多关于...

吃一堑消化不良
2016/12/01
1K
0
Go基础编程:异常处理(error接口、panic、recover)

1 error接口 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: Go语言的标准库代码包errors为用户提供如下方法: 另一个可以生成error...

tennysonsky
2018/01/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.2K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部