panic 异常/恐慌
panic 产生异常
package demo
import "fmt"
func init() {
fmt.Println("Exec Init 001")
}
func exec01() {
/* 异常: 使用panic 处理异常 。 用的少,目的是为了减少 try catch 乱用*/
// 主动出发 panic 函数
panic("主动抛出 panic") // panic: 主动抛出 panic 。强制结束
}
recover 接收异常
package demo
import "fmt"
func init() {
fmt.Println("Exec Init 002")
}
// 自定义 painc 抛出异常
func testPanicAndRecover() {
defer func() {
// 使用匿名函数方式。利用 recover 接收异常,并处理异常
if err := recover(); err != nil {
fmt.Println("recover err:", err)
fmt.Println("main程序继续执行⬇️")
fmt.Println("testPanicAndRecover 程序 不再继续执行🈲")
}
}()
defer fmt.Println("执行 testPanicAndRecover ----1")
defer fmt.Println("执行 testPanicAndRecover ----2")
panic("主动抛出 testPanicAndRecover 错误")
// panic 后续代码不再执行。
// 使用recover 接收异常也不再执行后续代码
defer fmt.Println("执行 testPanicAndRecover ----3")
defer fmt.Println("执行 testPanicAndRecover ----4")
}
func Exec02() {
/* recover 接收异常, 必须和 defer 结合使用*/
defer fmt.Println("执行 main ----1")
defer fmt.Println("执行 main ----2")
testPanicAndRecover()
defer fmt.Println("执行 main ----3")
}