Go语言的defer(延迟执行)语句,是在函数结束前执行,而如果在函数中有多个defer语句时,会像一个堆栈一样,先进后出,后进先出。defer语句在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题上很试用。
package main
import "fmt"
func funca() { fmt.Println("test funca")
}
func funcb() {
fmt.Println("test funcb")
}
//当funcc执行完,也就是输出test funcc时,才会去调用funca和funcb,而且是先调用funcb
func funcc() {
defer funca()
defer funcb()
fmt.Println("test funcc")
//return }
func main() {
funcc()
//因为defer是在main函数中的,所以要等main函数结束前才执行。
for i:=0;i<6;i++{
defer fmt.Println(i)
}
fmt.Println("test main func")
}
所以最终输出的结果是
test funcc
test funcb
test funca
test main func
5
4
3
2
1
0