Go defer Panic & Recover

defer 是个很有趣的东西,你在其它的语言中很少能见到。它会给你一种一见倾心,再见钟情的感觉。由于看的是英文的手册,

一开始没高明白是什么意思。直到理解了这句:

Go has a special statement called defer which schedules
a function call to be run after the function completes

大概的意思是说,Go有个特殊的声明,叫defer,它的作用是按拍一个函数在其他函数执行结束后再执行。

这么说感觉还是空洞的,手册上有个很好的例子来说明这个问题:

f, _ := os.Open(filename)
defer f.Close()

第一句是打开一个文件,第二句是关闭对文件的访问。肯定有人会问,这怎么能行,你的文件刚打开就关闭了?这样如何才能读取

文件中的内容呢?不怕,这个就是defer的特点所在。如果在defer f.Close() 下面的语句中还有文件操作,则f.Close这句话是不会被执行的。

有人会问,你不在这里执行,难道还在别的地方执行?对!!太对了。关闭文件的操作,就是在其他的操作执行完它才执行。这样就避免了有时代码很长

而忘了,关闭文件。

上面的知识defer的其中的一个特点。下面给出它的三个特点:

(1) it keeps our Close call near
our Open call so its easier to understand,

(2) if our function
had multiple return statements (perhaps one in
an if and one in an else) Close will happen before
both of them and

(3) deferred functions are run even if
a run-time panic occurs.

其实这里对defer还只是一个初步的认识,它还有很多东西需要我们去探索。

posted on 2012-09-27 20:37  zzzhhh  阅读(305)  评论(0编辑  收藏  举报

导航