Go学习——defer、panic
阅读原文时间:2024年11月06日阅读:1

延迟到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,而是到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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器