一、panic
panic的作用就是抛出一条错误信息,从它的参数类型可以看到它可以抛出任意类型的错误信息。在函数执行过程中的某处调用了panic,则立即抛出一个错误信息,同时函数的正常执行流程终止,但是该函数中panic之前定义的defer语句将被依次执行。之后该goroutine立即停止执行。
二、recover
recover()用于将panic的信息捕捉。recover必须定义在panic之前的defer语句中。在这种情况下,当panic被触发时,该goroutine不会简单的终止,而是会执行在它之前定义的defer语句。
建议每起一个goroutine,都defer统一捕获下异常
谨记用defer统一捕获异常只对 当前的goroutine 有效,goroutine的异常并不会向上传递给main主函数
例子
package main
import "fmt"
import "math"
func foo(a int) {
defer fmt.Println("foo退出来了")
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕获到的错误:%s\n", r)
}
}()
if a < 0 {
panic("必须输入大于0的数")
}
fmt.Println("该数的方根为:", math.Sqrt(float64(a)))
}
评论 (0)