Go语言的defer(延迟执行)语句,是在函数结束前执行,而如果在函数中有多个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