链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

本篇文章所讲的就是go编程中的延迟调用defer,希望对社区的成员有较多的帮助。

1 defer作用

关键字defer ⽤于延迟一个函数、方法或者当前所创建的匿名函数的执行。defer语句只能出现在函数或方法的内部。

func main() {

fmt.Println("this is a test")defer fmt.Println("this is a defer") //main结束前调用/*

运行结果:

    this is a testthis is a defer*/

}

Defer语句被用于处理成对的操作,通过defer机制,无论函数逻辑的复杂性,都能保证在任何执行路径下,资源被释放。释放资源应该直接跟在请求资源的语句后面。

2 defer和匿名函数结合使用

func main() {

a, b := 10, 20defer func(x int) { // a以值传递方式传给xfmt.Println("defer:", x, b) // b 闭包引用}(a)a += 10b += 100fmt.Printf("a = %d, b = %d\n", a, b)/*

运行结果:

    a = 20, b = 120defer: 10 120*/

}

3多个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")/*

运行结果:

ccccccccbbbbbbbbaaaaaaaapanic: runtime error: integer divide by zero*/

}

Go基础编程:延迟调用defer相关推荐

  1. Go 延迟调用 defer 用法详解

    引子 package counterimport ("log""sync" )type Counter struct {mu *sync.MutexValue ...

  2. Golang——延迟调用defer

    defer用于向当前函数注册稍后执行的函数调用.这些调用被称作延迟调用,它们直到当前函数执行结束前才被执行,常用于资源释放.错误处理等操作 func main() {f, err := os.Open ...

  3. ARM Cortex-M嵌入式C基础编程(下)

    ARM Cortex-M嵌入式C基础编程(下) ARM Cortex-M Embedded C Fundamentals/Tutorial-Aviral Mittal Load Region Vs E ...

  4. ARM Cortex-M嵌入式C基础编程(上)

    ARM Cortex-M嵌入式C基础编程(上) ARM Cortex-M Embedded C Fundamentals/Tutorial -Aviral Mittal 此技术是关于从编写简单的嵌入式 ...

  5. Linux应用程序设计之网络基础编程

    1.TCP/IP协议概述 1.1.OSI参考模型及TCP/IP参考模型 OSI协议参考模型是基于国际标准化组织(ISO)的建议发展起来的,从上到下工分为7层:应用层,表示层,会话层,传输层,网络层,数 ...

  6. 判断三角形java代码_java基础编程题之异常处理

    以下是刚开始学习java的基础编程题,每天持续更新java每个知识点的题目,持续练习,不断提高java基本功,培养编程能力.今天的练习的十八题是java的异常处理的使用. 1.检测年龄不能为负数和大于 ...

  7. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)

    原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...

  8. .NET基础编程之特性 - Attribute

    这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集. ...

  9. 华为机试题python版节选(基础编程题)

    前言 自学python之后,可以借助这些企业招聘时的机考题目来锤炼一下实践能力.. 每道题含要点解析,是按照自己理解梳理的,多个答案的是结合自己的答案+网上的答案,不一定很严谨,请读者自行在编译器中调 ...

最新文章

  1. Python pip安装第三方库的国内镜像
  2. Unity3D热更新LuaFramework入门实战
  3. 大跌眼镜!杭州一程序员年薪 30 万,竟靠偷车厘子缓解压力?
  4. 电子班牌系统服务器,电子班牌管理系统
  5. 基于MATLAB的RGB转YCBCR色彩空间转换
  6. Ubuntu 火狐浏览器不能上网解决办法
  7. Centos设置程序开机自启的方法
  8. 推荐算法炼丹笔记:电商搜索推荐业务词汇表
  9. 误删了公司数据库,但我还是活下来了
  10. 记住:永远不要在MySQL中使用UTF-8
  11. 从头开始开发gis_DevRel工程师一:从头开始建立开发人员关系团队
  12. 本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
  13. HDX|FDX-B格式面板式动物电子耳标阅读器|读卡器HX-L8160系列MODBUS RTU 协议与通信说明
  14. u深度重装系统详细教程_u深度重置用户密码操作步骤
  15. 数据中心机房搬迁实施方案流程
  16. Elasticsearch7.5配置IK中文分词器+拼音分词
  17. c语言编程百分比,c – 计算百分比
  18. D - Molar mass
  19. Python全栈开发实战学习14
  20. android 倒水动画,Android 模拟圆形水杯倒水的效果

热门文章

  1. sqlinesdata教程_如何将Oracle数据导入MySQL
  2. Mybatis注解学习记录
  3. spark编程基础--2.2scala基础知识
  4. 戴尔电脑管家_2020年笔记本电脑推荐指南:笔记本电脑应该怎么选?什么牌子的笔记本电脑更值得入手?...
  5. iOS App 连接外设的几种方式
  6. 智销功能_Shiro权限框架
  7. 什么是SOLID原则(第3部分)
  8. 一款腾讯UED设计的提示插件(使用教程)
  9. CSS将长文字换行的方法 (转)
  10. \\s+ split替换