Go错误处理之panic函数和recover函数使用及捕获异常方法

作者:雨雨不怕雨 时间:2024-02-13 02:16:12 

前言

前面我们讲过了error类型来处理一般的错误,本文会描述使用panic函数和recover函数来处理比较极端的错误。简单来说,当程序运行时遇到无法处理的错误或异常情况时,会调用panic函数引发一个运行时错误,此时程序会终止执行并抛出错误信息。为了避免程序崩溃,可以使用recover函数来捕获错误,并进行处理或恢复程序的执行,通常recover函数写在defer语句中。

panic函数

panic函数是内置的一个函数,他的结构如下:

func panic(v interface{})

此函数接受一个接口类型的值,这个值通常是错误的描述,调用次函数后,会引发异常,这将中止当前的程序流程,并在堆栈中记录当前的异常信息。此函数可以被主动调用,也可以在发生数组越界、空指针引用等情况下被动调用。

我们将上篇文章的除法例子进行小小的修改,使用panic进行错误处理:

package main
import (
  "fmt"
)
func divide(a, b int) int{
  if b == 0 {
     panic("division by zero")
  }
  return a / b
}
func main() {
  result := divide(10, 0)
  fmt.Println("the result is ",result)
}

运行后,程序直接退出了,报division by zero错误。

recover函数

有些时候,我们不希望panic函数直接粗暴的退出,这时候我们可以使用recover函数对pannic进行捕获,注意,recover函数只能写在defer关键字之后哦!

recover也是内置函数,他的结构如下:

func recover() interface{}

他能捕获到的panic函数报出的错误,并使用接口类型进行返回。

我们使用recover对例子再次修改,让程序可以继续的运行,而不是粗暴的退出,代码如下:

package main
import (
  "fmt"
)
func divide(a, b int) int{
  defer func() {
     if err:=recover();err!=nil {
        fmt.Printf("runtime panic : %v\n", err)
     }
  }()
  if b == 0 {
     panic("division by zero")
  }
  return a / b
}
func main() {
  result := divide(10, 0)
  fmt.Println("the result is ",result)
}

来源:https://blog.csdn.net/doreen211/article/details/129735009

标签:go,异常,panic,recover
0
投稿

猜你喜欢

  • pygame实现烟雨蒙蒙下彩虹雨

    2023-05-07 01:19:36
  • python中的内置函数max()和min()及mas()函数的高级用法

    2023-01-21 18:45:43
  • 修改、删除数据记录(DELETE\\UPDATE)

    2009-02-27 15:50:00
  • Xml Http抓取数据时乱码问题解决

    2008-04-24 11:16:00
  • Python实现手写一个类似django的web框架示例

    2022-06-18 03:17:26
  • JS中定位 position 的使用实例代码

    2024-05-03 15:05:09
  • Python类装饰器实现方法详解

    2021-11-15 20:01:05
  • python代码的几种常见加密方式分享

    2021-05-19 02:14:56
  • 使用 OpenAI API 和 Python 使用 GPT-3的操作方法

    2023-10-23 20:04:05
  • Python和C语言利用栈分别实现进制转换

    2022-10-02 15:43:15
  • 仿vue-cli搭建属于自己的脚手架的方法步骤

    2024-05-21 10:18:09
  • Python批量修改文件名实例操作分享

    2022-04-11 06:14:47
  • 鼠标双击滚动屏幕单击停止代码

    2008-02-21 11:44:00
  • Python类的动态修改的实例方法

    2021-07-03 12:16:15
  • mysql查询优化之100万条数据的一张表优化方案

    2024-01-13 20:10:04
  • Python多进程库multiprocessing中进程池Pool类的使用详解

    2022-11-22 03:21:11
  • python之拟合的实现

    2021-09-16 19:22:12
  • Python unittest单元测试框架实现参数化

    2022-11-01 18:29:48
  • python实现xml转json文件的示例代码

    2023-09-29 23:52:50
  • 速记Python布尔值

    2022-04-23 10:02:17
  • asp之家 网络编程 m.aspxhome.com