zoukankan      html  css  js  c++  java
  • Go学习——defer、panic

    defer:

    延迟到ret之前,通常用于IO的关闭 or 错误处理。
    在延迟出现的异常可以被后面的捕捉,但是只有最后一个。
    defer可以多次,这样形成一个defer栈,后defer的语句在函数返回时将先被调用

    func f() (result int) {
      deferfunc()
      {
        result++
      }()
      return 0
    
    }
    
    func test() error {
      f, err := os.Create("test.txt")
      if err != nil { return err }
      defer f.Close() // 注册调⽤用,⽽而不是注册函数。必须提供参数,哪怕为空。
      f.WriteString("Hello, World!")
      return nil
    }
    

    panic:

    函数执行的时候panic了,函数不往下走了,运行时并不是立刻向上传递panic,而是到defer那,等defer的东西都跑完了,panic再向上传递。

    func panic(v interface{})
    func recover() interface{}
    
    defer recover()  //无法捕捉
    

    所以可以在defer中用recover进行抓捕。
    而且recover必需在延迟调用内才行。


    参考:

    http://www.cnblogs.com/ghj1976/archive/2013/02/11/2910114.html
    https://github.com/qyuhen/book

  • 相关阅读:
    iptraf查看TCP/UDP某个特定端口的带宽与流量
    linux read 命令
    2 css常识二
    1 css常识
    18 表单
    17 事件
    16 DOM
    15 BOM
    14 函数-高级
    13 对象
  • 原文地址:https://www.cnblogs.com/Przz/p/6816531.html
Copyright © 2011-2022 走看看