浏览 1112
扫码
defer
Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。
defer的用法类似Java中的
try {}finally {}
我们先看这个例子pro04_4_1.go
package mainimport ("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()//紧接着打开写一句当函数结束的时候关闭文件。……//此处去写对文件的各种操作}