func与defer
说明:
Go语言中函数的return不是原子操作, 在底层分为两步来执行;
第一步: 返回值赋值
第二步: 真正的return返回
函数中如果存在defer, 那么defer执行的时机是在第一步和第二步之间;
例子1:
func f1() int {x := 5defer func(){x++}()return x
}
//return:
//第一步: 将x赋值给匿名返回变量ret
//进行defer操作, 修改x的值, x不是真正的返回值
//第二步: 返回匿名变量ret
//输出为:5
例子2:
func f2()(x int){defer func(){x++}()return 5
}
//返回变量为x
//return:
//第一步: 给x变量赋值5 x = 5
//defer操作, 修改x的值 x = 6
//第二步: 返回变量x
//输出: 6
例子3:
func f3()(y int){x := 5defer func(){x++}()return x
}//return:
//第一步: 给返回变量y赋值 y = x = 5
//defer: 修改x的值, x = 6
//第二步: 返回变量y y = 5
例子4:
func f4(x int){defer()(x int){x++}(x)return 5
}
//return:
//第一步: 给返回变量x赋值 x = 5
//defer: 将x传入defer 是值传递 修改copy后的x的值 x` = 6 x = 5
//第二步: 返回变量x x = 5
//输出: 5
func与defer相关推荐
- golang善用go func和defer
一.error与panic: error:可预见的错误 panic:不可预见的错误,panic一般通过defer中的recover()捕获 对于有风险的代码,若发生panic则会导致程序异常退出,例如 ...
- Go 学习笔记(17)— 函数(03)[defer 定义、defer 特点、defer 释放资源]
1. defer 定义 Go 函数的关键字 defer 可以提供注册多个延迟调用,只能出现在函数内部,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,这些调用遵循 ...
- Go基础编程:延迟调用defer
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本篇文章所讲的就是go编程中的延迟调用defer,希望对社区的成员有较多的帮助. 1 defer作用 关键字defer ...
- golang源码分析:defer流程分析
defer defer是golang中使用的延迟调用的函数,该函数的使用场景就是如果函数执行出错(panic),也能够通过recover方式进行捕捉错误并将出错时的一些资源进行回收,如果在性能有要求的 ...
- GO语言教程4:defer(延迟语句)详解
文章目录 1.defer语句格式 2.defer执行的时间 3.defer语句的作用 4.defer语句执行的顺序 5.defer与return的value之间的关系 6.用defer进行代码跟踪 7 ...
- Go笔记-错误处理和defer
为什么80%的码农都做不了架构师?>>> error error类型的声明可在builtin包中查看: type error interface {Error() string } ...
- Golang之轻松化解defer的温柔陷阱
什么是defer? defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行. defer语句通常用于 ...
- Go圣经-学习笔记之defer和异常处理
2019独角兽企业重金招聘Python工程师标准>>> 上一篇 Go圣经-学习笔记之函数值(二) 下一篇 Go圣经-学习笔记之方法 可变参数 形参数量可变的函数称为可变参数函数.使用 ...
- Go 语言 defer recover panic 简单例子
为什么80%的码农都做不了架构师?>>> // Mydef project main.go package mainimport ("log" )func ...
最新文章
- python数组用sum求和_对python中array.sum(axis=?)的用法介绍
- html 怎么使用http请求数据类型,HTTP请求方式中8种请求方法(简单介绍)
- 利用doc命令启动与关闭服务
- TensorFlow应用实战-17-Qlearning实现迷宫小游戏
- AI科学计算领域的再突破,昇思MindSpore做“基石”的决心有多强?
- 云原生游戏《云联物语》揭开神秘面纱 云鹭科技温向东带你深度了解云原生游戏领域...
- 数据库基础知识——互动百科
- 非递归中序遍历---算法导论12.1-3
- 温度采集系统(开源 原理图、PCB文件+源码+云平台+app端设计方案)
- CTF密码学之Base64,Base32,Base16
- sl400通过ac无法连接psk加密无线网络
- 超级经典的Word技巧
- SAP GUI750 双击创建子例程没反应,补丁下载
- [IOS]从零开始搭建基于Xcode7的IOS开发环境和免开发者帐号真机调试运行第一个IOS程序HelloWorld
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
- 学习笔记-Ramnit 蠕虫分析
- 文献类型参考文献的文献标识码
- vite 设置启动Network 为本地ip
- Map map=new HashMap(); 为什么是这样
- matlab中匿名(Anonymous)函数及bsxfun函数