defer是Go语言中的一个关键字,意为"延迟",可以在一个函数中添加多个defer语句,这些被定义的defer语句会在函数返回时逆序执行。
理解和熟练掌握defer的使用会让我们代码更加优雅简洁。
下面举一例子作简要介绍:
需求:写一段代码打开一个文件并进行某些操作,完成后关闭文件。
不用defer的写法:
func ReadWrite() bool{
file.open("fileA")
//do something
if a>0 {
file.Close()
return false
}
if a<-1 {
file.Close()
return false
}
file.Close()
return true
}
使用defer的写法:
func ReadWrite() bool {
file.open("fileA")
//do something
defer file.Close()
if a>0 {
return false
}
if a<-1{
return false
}
return true
}
有木有发现代码量少了?
再举一例,倒序打印 5 4 3 2 1
使用defer的写法 :
for i:=1 ;i<=5 ;i++ {
defer() fmt.Printf("%d " , i)
}
注意:多次调用defer , defer采用后进先出的堆栈模式,所以上例的结果是 :5 4 3 2 1