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

  • 相关阅读:
    网络七层模型
    datagaridview添加序号
    sqlserver查询数据库所有字段和表的关系
    Code Project精彩系列转
    操作不同线程中的控件
    PetaPoco数据读写并发时出错
    浮点型float数据强制转换成int整型
    PetaPoco微型ORM的使用错误记录
    EF出现基础提供程序在 Open 上失败
    Python中random模块
  • 原文地址:https://www.cnblogs.com/staff/p/13222413.html
Copyright © 2011-2022 走看看