zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    scanf使用尿性
    System : Assembly Programming
    Biology 03: Cardiovascular
    remove the smallest element from a linkedlist
    Relativity 04: CH4CH5
    Relativity 03: Space and Time in Classical Mechanics
    146 __str__和__repr__
    145 __init__和__new__
    144 __call__
    143 __doc__
  • 原文地址:https://www.cnblogs.com/staff/p/13222413.html
Copyright © 2011-2022 走看看