defer

不管程序是否出现异常,均在函数退出时候,自动执行相关代码

实战

实例1
package mainimport ("fmt"
)func main() {defer func() {fmt.Println("main defer")}()if err := test0(); err != nil {fmt.Println(err.Error())return}if err := test1(); err != nil {fmt.Println(err.Error())return}
}func test0() error {return nil
}func test1() error {return nil
}

运行结果

    main defer
实例2
package mainimport ("fmt""errors"
)func main() {defer func() {fmt.Println("main defer")}()if err := test0(); err != nil {fmt.Println(err.Error())return}if err := test1(); err != nil {fmt.Println(err.Error())return}
}func test0() error {return errors.New("test0 error")
}func test1() error {return nil
}

运行结果

test0 error
main defer
实例3
package mainimport ("fmt""errors"
)func main() {defer func() {fmt.Println("main defer")}()if err := test0(); err != nil {fmt.Println(err.Error())return}if err := test1(); err != nil {fmt.Println(err.Error())return}
}func test0() error {return nil
}func test1() error {return errors.New("test1 error")
}

运行结果

test1 error
main defer

实例4

package mainimport ("fmt""errors"
)func main() {defer func() {fmt.Println("main defer0")}()defer func() {fmt.Println("main defer1")}()if err := test0(); err != nil {fmt.Println(err.Error())return}if err := test1(); err != nil {fmt.Println(err.Error())return}
}func test0() error {defer func() {fmt.Println("test0 defer")}()return nil
}func test1() error {defer func() {fmt.Println("test1 defer")}()return errors.New("test1 error")
}

运行结果

test0 defer
test1 defer
test1 error
main defer1
main defer0

转载于:https://blog.51cto.com/12880687/2129966

Go语言-defer的使用相关推荐

  1. Go语言defer详解笔记

    Go语言defer详解 1.defer概述: ​ defer是用来声明一个延迟函数,并且将这个函数放到一个栈中,它的调用时间在return执行之前,详细来讲,它的执行时间在return的值赋值之后,在 ...

  2. Go语言defer关键字

    Go语言的defer关键字用于延迟调用,下面是关于Go语言defer关键字的一些基础概念: 1. defer关键字用于注册延迟调用: 2. 这些调用直到包含当前该defer关键字的函数执行完了才会被执 ...

  3. Go语言 defer

    引言 Go 语言中的 defer 语句是 UNIX 之父 Ken Thompson 大神发明的,是完全正交的设计. 也正因为 Go 语言遵循的是正交的设计, 所以才有了: "少是指数级的多/ ...

  4. Go语言defer详解

    1. 使用defer的优势 defer一般用于资源的释放和异常的捕捉, 作为Go语言的特性之一. defer 语句会将其后面跟随的语句进行延迟处理. 意思就是说 跟在defer后面的语言 将会在程序进 ...

  5. go语言defer的作用

    1.第一种情况,.differ后面只能跟着函数调用逻辑,且是压栈操作,先入后出 如下代码: package mainimport "fmt"func main() {//go语言中 ...

  6. java怎么延迟执行语句_Go语言defer(延迟执行语句)

    Go语言中关键字defer允许我们推迟到函数返回之前(或任意位置执行return语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为return语句同样可以包含一些操作,而不是单 ...

  7. go语言defer使用

    defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回.特别是当你在进行一些打开资源 ...

  8. Go 语言 defer recover panic 简单例子

    为什么80%的码农都做不了架构师?>>>    // Mydef project main.go package mainimport ("log" )func ...

  9. 万字长文剖析清楚 Go 语言 defer 原理

    大纲 编译器怎么编译 defer `struct _defer` 数据结构 `struct _defer` 内存分配 执行 defer 函数链( `deferreturn`  ) defer 怎么传递 ...

  10. go语言的defer语句

    go语言defer语句的用法 参考:https://www.jianshu.com/p/5b0b36f398a2 defer的语法 defer后面必须是函数调用语句,不能是其他语句,否则编译器会出错. ...

最新文章

  1. rk3399在linux机上烧写img,烧写固件 — TB-96AI documentation
  2. 从零开始学python电子书-从零开始学Python程序设计 PDF 完整影印版
  3. 高通---GPUCPU频率和工作模式的获取设置
  4. [转:作者: 出处:javaresearch ]选择JSF不选Struts的十大理由
  5. java的md5盐值加密_MD5盐值加密
  6. BZOJ 3884 上帝与集合的正确用法
  7. apache benchmark
  8. 一道常被人轻视的前端JS面试题
  9. Linux ext4文件系统下 extundelete 恢复 误删除的文件
  10. 公元2011年6月20日,我在博客园安家了,大家祝贺吧!
  11. iOS底层探索之多线程(九)—GCD源码分析(栅栏函数)
  12. OpenRefine数据清洗实战
  13. c语言解线性方程组矩阵形势,c语言解线性方程组.docx
  14. Prometheus集成telegram报警
  15. 通达信接口官网与量化交易有联系吗?
  16. re_mysql_20221210
  17. springsecurity忽视拦截静态资源
  18. 实名推荐的神器,你安排上了几款?
  19. window.open()跳转新页面访问不了,但是单独访问这些地址则正常
  20. 多个输入框失焦事件触发异常问题解决

热门文章

  1. 摄像头上传文件服务器失败,vue打开摄像头拍照并上传至服务器
  2. Could not connect to Redis at 127.0.0.1:13141: Cannot assign requested address
  3. win7建立服务器文件夹权限,win7 ftp服务器 文件夹权限
  4. linux如何安装php,Linux下如何安装配置PHP
  5. 安装ps时无法验证订阅状态_关于宝马B38/B48发动机无法启动的技术通报
  6. 闪退没由报错_使命召唤:(cod16)出现的闪退问题以及解决办法
  7. python两组数的差异_Python中两个日期之间的差异
  8. arcgis分隔图层重复出文件_【干货】ArcGIS不可或缺的制图技巧,处理好细节才能让图更专业!...
  9. 前端大屏幕项目的一点思考
  10. java字符排序_Java实现对字符串中的数值进行排序操作示例