defer一般用于在函数结束时执行必要的处理工作。例如,关闭文件描述符,关闭网络连接等等。
函数中可以定义多个defer,执行的时候按照先进后出的顺序。
defer定义的语句,即使遇到panic,也会执行。
下面简单举例说明用法:
package main
import ( "fmt" ) func main() { defer func(){ fmt.Println("defer end...") }() fmt.Println("start...") panic("test here") }
ouput:
start…
defer end…
panic: test heregoroutine 1 [running]: main.main() D:/work/go_exercise/t.go:25 +0x104