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 here
goroutine 1 [running]:
main.main()
D:/work/go_exercise/t.go:25 +0x104