go语言开发基础18 - 之go语言里的defer方法使用

1.在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量和资源清理。
通过defer,我们可以在代码中优雅的关闭/清理代码中所使用的变量。defer作为golang清理变量的特性,有其独有且明确的行为。

2.多个defer语句,按先进后出的方式执行

3.defer语句中的变量在defer声明时就决定了(后面的修改不会影响defer的值)

4.defer支持定义匿名函数

举个例子:

func main() {
    fmt.Println("start")
    defer fmt.Println(1)
    defer fmt.Println(2)
    defer fmt.Println(3)
    fmt.Println("end")
}

执行结果:
start
end
3
2
1

  

由于defer语句延迟调用的特性,所以defer语句能非常方便的处理资源释放问题。比如:资源清理、文件关闭、解锁及记录时间等。

 

derfer方法的用途:

1.关闭文件句柄(防止文件泄露),示例:

    func read() {
        file := open(filename)
        defer file.Close()
    }

  

2.锁资源释放(如果锁资源忘记释放就会变成死锁)

func lock() {
        mc.Lock()
        defer mc.Unlock()
        ...
    }

  

3.数据库连接的释放等

posted @ 2020-06-02 17:51  欧-阳  阅读(231)  评论(0)    收藏  举报