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

}

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