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.数据库连接的释放等

浙公网安备 33010602011771号