先看看panic是干什么的
执行到panic的地方,会出现异常。后面的代码不会执行,加了defer,panic之前会执行defer,加了recover会修复后继续执行
defer要在可能引发panic之前定义
recover()必须搭配defer使用
import ("fmt")
func f1() {fmt.Println("run f1")}
func f2() {fmt.Println("run f2")panic("出现严重错误!")fmt.Println("run after")}func f3() {fmt.Println("run f3")}func main() {f1()f2()f3()}
运行结果:
run f1
run f2
panic: 出现严重错误!.....后面不执行
如果出错前,还要关闭连接等
func f1() {fmt.Println("run f1")}
func f2() {fmt.Println("打开数据库连接...")defer func(){fmt.Println("释放数据库连接...")}()panic("出现严重错误!")fmt.Println("run after")}func f3() {fmt.Println("run f3")}func main() {f1()f2()f3()}
输出结果:
run f1
打开数据库连接...
释放数据库连接...
panic: 出现严重错误!........后面不执行
加上recover
func f1() {fmt.Println("run f1")}
func f2() {fmt.Println("打开数据库连接...")defer func(){err := recover()fmt.Println(err)fmt.Println("释放数据库连接...")}()panic("出现严重错误!")fmt.Println("run after")}func f3() {fmt.Println("run f3")}func main() {f1()f2()f3()}
执行结果
run f1
打开数据库连接...
出现严重错误!
释放数据库连接...
run f3