Go panic recover


 

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM