zoukankan      html  css  js  c++  java
  • GO 异常处理

    一 defer

    • 当一个函数调用前有defer 时, 那么这个函数的执行会推迟到包含这个 defer 语句的函数即将返回前才执行
    • defer 调用的函数参数的值 defer 被定义时就确定了
    • defer 函数内部所使用的变量的值需要在这个函数运行时才确定
    • 有多个defer 调用, 则调用的顺序是先进后出的顺序, 类似于入栈出栈一样
    • defer 通常用于 open/close, connect/disconnect, lock/unlock 等这些成对的操作, 来保证在任何情况下资源都被正确释
    func bigSlowOperation() {
        defer trace("bigSlowOperation", bigSlowOperation)() // don't forget theextra parentheses
        // ...lots of work…
        time.Sleep(10 * time.Second) // simulate slowoperation by sleeping
    }
    func trace(msg string, f func()) func() {
        start := time.Now()
        log.Printf("enter %s", msg)
        return func() {
            log.Printf("exit %s (%s)", msg, time.Since(start))
        }
    }

    二  Panic异常

    使用panic()函数引发错误,然后在defer语句中调用recover()函数捕获错误,这就是Go语言的异常恢复机制——panic-recover机制.在健壮的程序中,任何可以预料到的错误,如不正确的输入、错误的配置或是失败的I/O操作都应该被优雅的处理,最好的处理方式,就是使用Go的错误机制

        defer func() {
            if r := recover(); r != nil {
                fmt.Println("Recovered in f", r)
            }
        }()
        panic("ERROR2")

  • 相关阅读:
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    DFA最小化,语法分析初步
    非确定的自动机NFA确定化为DFA
    正规式、正规文法与自动机
    第03组 Alpha事后诸葛亮
    第03组 Alpha冲刺(4/4)
    第03组 Alpha冲刺(3/4)
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺(1/4)
  • 原文地址:https://www.cnblogs.com/sysnap/p/6860683.html
Copyright © 2011-2022 走看看