Go-defer和追踪
关键词defer允许我们推迟到函数返回之前(既函数return语句之后)一刻才执行某个语句或函数。类似于JAVA中的finally语句块,它一般用于释放某些资源。
之所以有defer的语法是为了代码更加的简洁,易读。相当于一个语法糖(在创建资源后,就写好释放资源的代码)
defer的特点如下:
- 在函数return之后才会执行
- 当有多个defer执行时,以逆序执行(类似栈,即后进先出)
1 | func f() { |
defer的实际应用###
1.关闭文件流
1 | inputFile, inputError := os.Open("input.dat") |
2.解锁加锁的资源
1 | mu.lock() |
3.关闭 数据库连接
1 | defer disconnectFromDB() |
4.追踪函数
1 | func trace(s string) string { |
5.使用 defer 语句来记录函数的参数与返回值
1 | func func1(s string) (n int, err error) { |