这篇文章主要介绍“Go之panic函数和recover函数使用及捕获异常的方法是什么”,在日常操作中,相信很多人在Go之panic函数和recover函数使用及捕获异常的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go之panic函数和recover函数使用及捕获异常的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
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 ", err) } }() if b == 0 { panic("division by zero") } return a / b } func main() { result := divide(10, 0) fmt.Println("the result is ",result) }