golang中的defer panic recover
来源:互联网 发布:手机点读软件 编辑:程序博客网 时间:2024/05/16 13:03
大家都知道golang里的panic相当于其他语言里的throw,而recover相当于其他语言里的cacth,可是由于golang的recover机制要求必须在defer的函数里才能执行catch panic
大概意思如下
func protect(g func()) {defer func() {log.Println("done") // Println executes normally even if there is a panicif x := recover(); x != nil {log.Printf("run time panic: %v", x)}}()log.Println("start")g()}
这似乎跟try catch没啥区别,但是如果我们想实现一个其他语言里的如下功能时,可就不一样了
int test() { try { doSomething(); } catch { return 1 } return 2}
显然这个函数需要能够根据有没有异常发生来返回不同的值,这怎么办呢?
其实这个问题与recover以及panic没啥关系了,这个问题纯粹属于defer的问题了,也即能不能在defer的函数里修改当前函数的返回值,答案当然是肯定的了,你只需要给返回值命名就行了
func routine() (b bool) {defer func() {err := recover()if err != nil {fmt.Printf("err found\n")b = true}}()if rand.Int()%10 == 1 {panic("hello")}b = falsereturn}
但是大家往深里想一下的话,就会觉得这样实现也挺坑爹的了,比如,里面有两处panic的时候,怎么办呀?当然是有办法的了,只是比较丑陋而已,这里就不举例说明了。
- golang中的defer panic recover
- Golang中的defer, panic, recover
- Golang---Defer, Panic, and Recover
- 【GoLang】panic defer recover 深入理解
- golang之defer,panic,recover用法
- golang 使用defer、panic、recover的问题
- golang中的defer panic使用方法
- Golang中的panic和recover
- Defer, Panic, and Recover
- Go-defer,panic,recover
- Defer, Panic, and Recover
- GO defer panic recover
- Golang 中的 panic 与 recover 理解
- go语言中的defer、panic、recover处理异常
- go语言中的defer、panic、recover处理异常
- 理解Defer、Panic和Recover
- [GoBlog] Defer, Panic, and Recover
- Understanding Defer, Panic and Recover
- 不用中间变量交换2个变量的值
- 1066 鸡兔同笼(2)
- 原谅我今天才学会使用win32的按键消息处理!
- 什么是java序列化,如何实现java序列化?
- Outlook最小到系统托盘
- golang中的defer panic recover
- BOS 使得打开UI界面最大化 实现
- markdown cheatsheat in markdown preview plugin of sublimex
- 为明天上午的百度面试做准备
- chkrootkit安装配置教程 – Linux后门入侵检测
- ubuntu 命令行模式和图形界面切换
- 前端 CSS 规范大全
- Date、String和Timestamp类型转换
- Windows消息