Go基础编程:延迟调用defer
2017-12-29 21:22
357 查看
1 defer作用
关键字 defer ⽤于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行。注意,defer语句只能出现在函数或方法的内部。func main() { fmt.Println("this is a test") defer fmt.Println("this is a defer") //main结束前调用 /* 运行结果: this is a test this is a defer */ }
defer语句经常被用于处理成对的操作,如打开、关闭、连接、断开连接、加锁、释放锁。通过defer机制,不论函数逻辑多复杂,都能保证在任何执行路径下,资源被释放。释放资源的defer应该直接跟在请求资源的语句后。
2 多个defer执行顺序
如果一个函数中有多个defer语句,它们会以LIFO(后进先出)的顺序执行。哪怕函数或某个延迟调用发生错误,这些调用依旧会被执⾏。func test(x int) { fmt.Println(100 / x)//x为0时,产生异常 } func main() { defer fmt.Println("aaaaaaaa") defer fmt.Println("bbbbbbbb") defer test(0) defer fmt.Println("cccccccc") /* 运行结果: cccccccc bbbbbbbb aaaaaaaa panic: runtime error: integer divide by zero */ }
3 defer和匿名函数结合使用
func main() { a, b := 10, 20 defer func(x int) { // a以值传递方式传给x fmt.Println("defer:", x, b) // b 闭包引用 }(a) a += 10 b += 100 fmt.Printf("a = %d, b = %d\n", a, b) /* 运行结果: a = 20, b = 120 defer: 10 120 */ }
相关文章推荐
- Go编程基础—defer、panic、recover处理异常
- Go编程基础—defer、return、返回值之间执行顺序的坑
- Go基础编程:环境搭建
- Go编程基础<二>
- Go编程基础—Sublime Text3 + Golang搭建开发环境
- Go编程基础—接口(interface)
- Go基础编程:Socket编程
- Go编程基础之二 Go基础知识
- Go编程基础—常见结构
- Go编程基础——控制语句
- Go基础编程:并发编程—channel
- Go语言基础学习九-过程式编程一
- Go基础编程:复合类型—结构体
- 编程基础知识之第一个Go程序
- Go编程基础—类型和变量
- Go编程基础—数组(array)
- Go编程基础—函数(func)
- Go编程基础—并发(concurrency)
- Unix高级编程:库函数与系统调用函数区别、文件锁、进程基础
- GameMonkey脚本语言编程基础——函数绑定和函数调用