腥风血雨中,这招救了我的代码!

简介: 腥风血雨中,这招救了我的代码!

/ Go 语言 recover 避免程序宕机详解 /

Go 语言中可以通过 recover 机制来防止程序崩溃,本文将通过完整的示例详细介绍 recover 的用法。本文主要内容

  1. recover 基本用法
  2. 错误处理
  3. 重新 panic
  4. 多层 recover
  5. 与错误处理结合

1

 

一、recover 基本用法

recover 可以捕获 panic,示例:

func main() {
  defer func() {
    fmt.Println("Recover: ", recover()) // 捕获panic信息
  }()
  panic("Crash") // 触发panic
}

输出:

Recover:  Crash

defer 延迟执行 recover,捕获到 panic 参数。

2

 

二、错误处理

可以根据 recover 结果进行错误处理:

func main() {
  defer func() {
    r := recover()
    if r != nil {
      fmt.Println("Recovered from panic: ", r)
    }
  }()
  panic(123)
}

输出:

Recovered from panic:  123

根据 recover 的参数进行处理。

3

 

三、重新 panic

也可以在 recover 后重新 panic:

func main() {
  defer func() {
    if r := recover(); r != nil {
       fmt.Println("Recovered: ", r)
       panic(r) // 重新panic
    }
  }()
  panic(123)
}

输出:

Recovered:  123
panic: 123

根据情况选择是否重新 panic。

4

 

四、多层 recover

通过多层 defer 可以多次 recover:

func main() {
  defer func() { 
    if r := recover(); r != nil {
      fmt.Println("Recovered 1: ", r)
    }
  }()
  defer func() {
    if r := recover(); r != nil {
      fmt.Println("Recovered 2: ", r)
    }
  }()
  panic(123)
}

输出:

Recovered 2:  123
Recovered 1:  123  

多层 defer 实现多次 recover。

5

 

五、与错误处理结合

recover 要与错误处理结合使用:

if err := dangerous(); err != nil {
  // 错误处理 
}
func dangerous() (err error) {
  defer func() {
    if r := recover(); r != nil {
      err = r.(error) // 转换为error类型
    }
  }()
  // 可能引起panic的代码
  return
}

常规错误用 err,不可恢复错误用 panic+recover。

6

 

六、总结

recover 机制可以有效防止 Go 程序完全崩溃,与错误处理配合使用可以提高程序健壮性。

综上所述,详细介绍了如何通过 recover 机制避免 Go 程序崩溃,可以帮助大家更好地处理 Go 程序中的 panic 问题。


目录
相关文章
|
存储 安全 Python
python多线程------>这个玩意很哇塞,你不来看看吗
python多线程------>这个玩意很哇塞,你不来看看吗
|
前端开发 数据库
贼无聊的文章
贼无聊的文章
45 0
|
开发工具 Python
嗖嗖的,再也不怕被嘲笑了!!!
嗖嗖的,再也不怕被嘲笑了!!!
|
IDE 开发工具 Python
这样的奇技淫巧,劝你不用也罢
这样的奇技淫巧,劝你不用也罢
148 0
|
Python
一日一技:你的代码是如何被炫技毁掉的
一日一技:你的代码是如何被炫技毁掉的
110 0
|
JavaScript 前端开发
不看后悔系列!原来代码还可以这么写!
不看后悔系列!原来代码还可以这么写!
|
数据安全/隐私保护
推荐5个神仙软件,个个让你爱不释手
最近陆陆续续收到好多小伙伴的咨询,这边也是抓紧时间整理出几个好用的软件,希望可以帮到大家。
203 0
|
数据安全/隐私保护 索引 Python
这下女友总算满意了!
上次跟女友介绍了正则表达式的基本语法,以及在 Python 中如何使用。结果她还不满意,说传说中的正则表达式就这么简单?当然不是,今天就来跟大家一起介绍下正则表达式更多的使用技巧。
166 0
|
弹性计算 Linux 数据库
发生了这种情况,数据还有救吗?
这样的惊喜还是少一些吧!
656 0
发生了这种情况,数据还有救吗?
|
前端开发 Java
【程序媛晒83行代码】程序媛,一枚喜欢自己写点宏文件的小姐姐
平时喜欢自己写点宏文件……最喜欢自己写的啦
2335 0

相关实验场景

更多