defer
Go語言中有種不錯的設計,即延遲(defer)語句,你可以在函數中添加多個defer語句。當函數執行到最后時,這些defer語句會按照逆序執行,最后該函數返回。特別是當你在進行一些打開資源的操作時,遇到錯誤需要提前返回,在返回前你需要關閉相應的資源,不然很容易造成資源泄露等問題。如下代碼所示,我們一般寫打開一個資源是這樣操作的:
func ReadWrite() bool {
file.Open("file")
// 做一些工作
if failureX {
file.Close()
return false
}
if failureY {
file.Close()
return false
}
file.Close()
return true
}
我們看到上面有很多重復的代碼,Go的defer有效解決了這個問題。使用它后,不但代碼量減少了很多,而且程序變得更優雅。在defer后指定的函數會在函數退出前調用。
func ReadWrite() bool {
file.Open("file")
defer file.Close()
if failureX {
return false
}
if failureY {
return false
}
return true
}
如果有很多調用defer,那么defer是采用后進先出模式,所以如下代碼會輸出4 3 2 1 0
for i := 0; i < 5; i++ {
defer fmt.Printf("%d ", i)
}
轉自:http://blog.csdn.net/eclipser1987/article/details/12089271
