目录

4.4 defer

优质
小牛编辑
131浏览
2023-12-01

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()//紧接着打开写一句当函数结束的时候关闭文件。
    ……//此处去写对文件的各种操作
}