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

  • 相关阅读:
    JavaScript之六种排序法
    实习的意义
    HTML、JS、CSS之特殊字符
    CSS之全屏背景图
    Swiper之滑块1
    (转)Android之接口回调机制
    (转)Android之自定义适配器
    反射
    对数据库事务、隔离级别、锁、封锁协议的理解及其关系的理解
    get和Post区别
  • 原文地址:https://www.cnblogs.com/staff/p/13222413.html
Copyright © 2011-2022 走看看