GO语言延迟函数defer用法分析
作者:shichen2014 时间:2024-04-23 09:45:39
本文实例讲述了GO语言延迟函数defer用法。分享给大家供大家参考。具体分析如下:
defer 在声明时不会立即执行,而是在函数 return 后,再按照 FILO (先进后出)的原则依次执行每一个 defer,一般用于异常处理、释放资源、清理数据、记录日志等。这有点像面向对象语言的析构函数,优雅又简洁,是 Golang 的亮点之一。
代码1:了解 defer 的执行顺序
package main
import "fmt"
func fn(n int) int {
defer func() {
n++
fmt.Println("3st:", n)
}()
defer func() {
n++
fmt.Println("2st:", n)
}()
defer func() {
n++
fmt.Println("1st:", n)
}()
return n //没有做任何事情
}
func main() {
fmt.Println("函数返回值:", fn(0))
}
输出:
1st: 1
2st: 2
3st: 3
函数返回值: 0
代码2:经典应用实例
func CopyFile(dst, src string) (w int64, err error) {
srcFile, err := os.Open(src)
if err != nil {
return
}
defer srcFile.Close() //每次申请资源时,请习惯立即申请一个 defer 关闭资源,这样就不会忘记释放资源了
dstFile, err := os.Create(dst)
if err != nil {
return
}
defer dstFile.Close()
return io.Copy(dstFile, srcFile)
}
defer 还有一个重要的特性,就是即便函数抛出了异常,也会被执行的。 这样就不会因程序出现了错误,而导致资源不会释放了。
希望本文所述对大家的GO语言程序设计有所帮助。
标签:GO语言,函数,用法
0
投稿
猜你喜欢
mysql insert if not exists防止插入重复记录的方法
2024-01-17 08:40:43
PHP中集成PayPal标准支付的实现方法分享
2023-09-06 09:11:22
pyinstaller打包多个py文件和去除cmd黑框的方法
2022-12-18 13:52:30
使用Python实现管理系统附源码
2023-04-04 04:22:34
Python3 完全平方数案例
2022-01-03 03:38:37
SuperSocket 信息: (SpnRegister) : Error 1355。解决方法
2024-01-17 22:54:02
解决pip install报错:Cannot connect to proxy问题
2021-05-01 01:14:11
ASP实现表单中容量大的数据的提交方法
2008-10-16 11:07:00
python、Matlab求定积分的实现
2021-08-25 15:43:28
[多图]新:60个国外创意404页面设计
2008-12-05 12:00:00
Pycharm修改python路径过程图解
2022-10-27 15:57:26
sql存储过程获取汉字拼音头字母函数
2011-11-03 16:58:05
Python基于贪心算法解决背包问题示例
2022-10-31 01:25:56
SQL Server数据库导入MySQL数据库体验
2009-01-20 16:07:00
python实现用类读取文件数据并计算矩形面积
2022-05-16 21:11:38
对django layer弹窗组件的使用详解
2021-09-08 00:09:38
详解监听MySQL的binlog日志工具分析:Canal
2024-01-27 11:00:35
在Pycharm中项目解释器与环境变量的设置方法
2023-12-31 02:49:53
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2023-12-17 18:52:13
在 CSS 中关于字体处理效果的思考
2008-04-25 22:57:00