要一直走下去

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

先看看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

 

posted on 2020-07-01 23:52  要一直走下去  阅读(1372)  评论(0编辑  收藏  举报