i***h 发帖数: 12655 | |
e*****w 发帖数: 144 | 2 当你需要提早return出函数的时候,defer能保证执行一些善后工作,比如Unlock一个
mutex。
【在 i***h 的大作中提到】 : 不是新发明吧 : 搞这个目的是什么?
|
p********8 发帖数: 2061 | 3 很好用啊
如果不用defer,我们的代码可能需要这样写
res := Open(xxx)
if err := xxx; err != nil {
res.Close()
return
}
if err := yyy; err != nil {
res.Close()
return
}
// not error
res.Close()
不但繁琐,还很容易忘记res.Close()
用了defer,就不用操心res的释放了,如下:
res := Open(xxx)
defer res.Close()
if err := xxx; err != nil {
return
}
if err := yyy; err != nil {
return
}
// not error,no need to call res.Close()
【在 i***h 的大作中提到】 : 不是新发明吧 : 搞这个目的是什么?
|
l*******b 发帖数: 2586 | 4 和java 的finally类似 ? 有什么区别?
【在 e*****w 的大作中提到】 : 当你需要提早return出函数的时候,defer能保证执行一些善后工作,比如Unlock一个 : mutex。
|
p*****2 发帖数: 21240 | 5 c程序员没有见过finally吧
【在 l*******b 的大作中提到】 : 和java 的finally类似 ? 有什么区别?
|
p***o 发帖数: 1252 | 6 Windows上的SEH也快有20年的历史了吧。
【在 p*****2 的大作中提到】 : c程序员没有见过finally吧
|
c****f 发帖数: 1102 | 7 很好用 你不用主动close() 在载入以后 直接一个defer 就不用担心没close的危险
了 |