defer
Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。
defer的用法类似Java中的
try {
}finally {
}
我们先看这个例子pro04_4_1.go
package main
import (
"fmt"
)
func main() {
for i := 0; i < 5; i++ {
defer fmt.Printf("%d ", i)
}
}
defer执行的方式是后进先出(LIFO),所以执行的结果是4 3 2 1 0。如果不加defer,输出的结果就是0 1 2 3 4
defer的典型用用场景
Go中的defer绝对是一个对程序狗非常贴心的设计,很多时候,我们写程序打开文件、数据库的时候都有可能会忘记写关闭,主要是由于逻辑判断的过多,导致我们可能在某个分支里面忘记了关闭,有了defer就会很大程度的避免这个逻辑错误。
defer的意思是”在函数退出时调用”,特别用于对文件进行读写操作的时候,需要在open之后要调用close操作,将close操作使用defer。
//写文件
func writeFile(channels []models.Channel,filename string){
fout,err := os.Create(filename) //打开文件
defer fout.Close()//紧接着打开写一句当函数结束的时候关闭文件。
……//此处去写对文件的各种操作
}