go語言學習10(defer)

defer後面緊跟的一條語句會被壓入獨立的棧中,當程序段結束後會依次彈棧執行。

注意:當defer語句壓入棧中時,也會將相關的變量同時拷貝入棧(不會改變執行結果),看個例子,如下

func sum(n int) int{

           var n = 10

           defer fmt.Println(“befor”,n) //後輸出這句—befor10

           n = n + 1

           fmt.Println(“after”,n) //先輸出這句—after11

}

defer主要是爲了延時釋放資源,防止釋放步驟的遺忘。程序員不用爲在什麼時機釋放資源而擔心,也不用擔心遺漏釋放動作。看個示例:

func test(){

           file = openfile(文件名)

           defer file.close()

           //other code

          

           connect = openDatabase()

           defer connect.close()

           //other code

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章