Go 语言defer用法
defer延迟调用:
1、确保调用在函数结束时发生;
2、defer列表为先进后出;
3、通常在Open/Close Lock/Unlock中使用。
defer调用顺序示例:
package main import ( "fmt" ) func deferType() { defer fmt.Println("defer 01") defer fmt.Println("defer 02") fmt.Println("hello defer") defer fmt.Println("defer 03") panic("hello panic") defer fmt.Println("defer 04") // panic后的defer不会被执行 } func main() { deferType() } 输出结果: hello defer panic: hello panic defer 03 defer 02 defer 01 goroutine 1 [running]: main.deferType() /Users/shongbing/go/src/imooc/errhanding/defer/defer.go:15 +0x19b main.main() /Users/shongbing/go/src/imooc/errhanding/defer/defer.go:35 +0x22
defer 关闭文件
package main import ( "os" "bufio" "fmt" ) func Fibonacci() func() int { // 斐波那契数列,返回一个intGen类型 a, b := 0, 1 return func() int { a, b = b, a + b return a } } func writeFile(filename string) { file, err := os.Create(filename) if err != nil { panic(err) } defer file.Close() writer := bufio.NewWriter(file) defer writer.Flush() f := Fibonacci() for i:=0; i<20; i++ { fmt.Fprintln(writer, f()) } } func main() { writeFile("fib.txt") }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步