开发者

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

开发者 https://www.devze.com 2023-03-25 10:48 出处:网络 作者: 雨雨不怕雨
目录前言panic函数recover函数总结前言 前面我们讲过了error类型来处理一般的错误,本文会描述使用panic函数和recover函数来处理比较极端的错误。简单来说,当程序运行时遇到无法处理的错误或异常情况时,会调用pani
目录
  • 前言
  • panic函数
  • recover函数
  • 总结

前言

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

panic函数

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

func panic(v interface{})

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

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

package main

import (
   "fmt"
)

func divide(a, b int) int{
   if b == 0 {
      panic("division by zero")
   }
   return a / b
}

func main开发者_JS培训() {
   result := divide(10, 0)
   fmt.Pjavascriptrintln("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)
}

总结

本篇博客探讨了如何使用 panic 和 recover 来处理 Go 语言中的异常。当程序遇到无法处理的错误时,它可以使用 panic 函数引发异常javascript,并使用 recover 函数结合defer关键词从异常中恢复。

到此这篇关于Go错误处理之panic函数和recover函数使用及捕获异常方法的文章就介绍到这了,更多相关go异常捕获panic 和 recover内容请搜索我们以前的文章或继续浏览下面的相android关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号