PHP
·
发表于 5年以前
·
阅读量:8410
func panic(interface{})
和func recover() interface{}
是Golang中用于错误处理的两个函数。
panic
的作用就是抛出一条错误信息,从它的参数类型可以看到它可以抛出任意类型的错误信息。在函数执行过程中的某处调用了panic,则立即抛出一个错误信息,同时函数的正常执行流程终止,但是该函数中panic之前定义的defer语句将被依次执行。之后该goroutine立即停止执行。
recover()
用于将panic的信息捕捉。recover必须定义在panic之前的defer语句中。在这种情况下,当panic被触发时,该goroutine不会简单的终止,而是会执行在它之前定义的defer语句。
相关示例代码如下:
package main
import (
"errors"
"fmt"
)
func deferPrint() (i int) {
defer func() {
fmt.Println(i)
i = 4
}()
return 2
}
func panicTest() {
defer func() {
if p := recover(); p != nil {
fmt.Println("recover panic")
}
}()
panic(errors.New("this is a panic"))
}
func main() {
fmt.Println("before panic")
panicTest()
fmt.Println("after panic")
}