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
  • asp之家 网络编程 m.aspxhome.com