Go基础编程:延迟调用defer
链客,专为开发者而生,有问必答!
此文章来自区块链技术社区,未经允许拒绝转载。
本篇文章所讲的就是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相关推荐
- Go 延迟调用 defer 用法详解
引子 package counterimport ("log""sync" )type Counter struct {mu *sync.MutexValue ...
- Golang——延迟调用defer
defer用于向当前函数注册稍后执行的函数调用.这些调用被称作延迟调用,它们直到当前函数执行结束前才被执行,常用于资源释放.错误处理等操作 func main() {f, err := os.Open ...
- ARM Cortex-M嵌入式C基础编程(下)
ARM Cortex-M嵌入式C基础编程(下) ARM Cortex-M Embedded C Fundamentals/Tutorial-Aviral Mittal Load Region Vs E ...
- ARM Cortex-M嵌入式C基础编程(上)
ARM Cortex-M嵌入式C基础编程(上) ARM Cortex-M Embedded C Fundamentals/Tutorial -Aviral Mittal 此技术是关于从编写简单的嵌入式 ...
- Linux应用程序设计之网络基础编程
1.TCP/IP协议概述 1.1.OSI参考模型及TCP/IP参考模型 OSI协议参考模型是基于国际标准化组织(ISO)的建议发展起来的,从上到下工分为7层:应用层,表示层,会话层,传输层,网络层,数 ...
- 判断三角形java代码_java基础编程题之异常处理
以下是刚开始学习java的基础编程题,每天持续更新java每个知识点的题目,持续练习,不断提高java基本功,培养编程能力.今天的练习的十八题是java的异常处理的使用. 1.检测年龄不能为负数和大于 ...
- 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)
原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...
- .NET基础编程之特性 - Attribute
这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集. ...
- 华为机试题python版节选(基础编程题)
前言 自学python之后,可以借助这些企业招聘时的机考题目来锤炼一下实践能力.. 每道题含要点解析,是按照自己理解梳理的,多个答案的是结合自己的答案+网上的答案,不一定很严谨,请读者自行在编译器中调 ...
最新文章
- Python pip安装第三方库的国内镜像
- Unity3D热更新LuaFramework入门实战
- 大跌眼镜!杭州一程序员年薪 30 万,竟靠偷车厘子缓解压力?
- 电子班牌系统服务器,电子班牌管理系统
- 基于MATLAB的RGB转YCBCR色彩空间转换
- Ubuntu 火狐浏览器不能上网解决办法
- Centos设置程序开机自启的方法
- 推荐算法炼丹笔记:电商搜索推荐业务词汇表
- 误删了公司数据库,但我还是活下来了
- 记住:永远不要在MySQL中使用UTF-8
- 从头开始开发gis_DevRel工程师一:从头开始建立开发人员关系团队
- 本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
- HDX|FDX-B格式面板式动物电子耳标阅读器|读卡器HX-L8160系列MODBUS RTU 协议与通信说明
- u深度重装系统详细教程_u深度重置用户密码操作步骤
- 数据中心机房搬迁实施方案流程
- Elasticsearch7.5配置IK中文分词器+拼音分词
- c语言编程百分比,c – 计算百分比
- D - Molar mass
- Python全栈开发实战学习14
- android 倒水动画,Android 模拟圆形水杯倒水的效果