当前位置: 首页 > news >正文

go defer用法_类似与python_java_finially

defer 执行 时间

defer 一般 定义在 函数 开头, 但是 他会 最后 被执行

A defer statement defers the execution of a function until the surrounding function returns.

如果说 为什么 不在 末尾 定义 defer 呢, 因为 当 错误 发生时, 程序 执行 不到 末尾 就会 崩溃.

defer 的 参数 定义 会 立刻 被执行, 最后 被执行 的 只有 最外层 函数的 定义.

The deferred call’s arguments are evaluated immediately, but the function call is not executed until the surrounding function returns.

下边 的 例子 需要好好 理解,
会最后 被执行的 , 只有 最外层的 函数调用

第二层的 函数 作为 参数 传入 时, 也会被 立即 执行.

defer 中的 变量, 会立即 保存 当前 状态,
比如 x:=1 ; defer print(x); x=2 , 只会 输出 1

defer 是 stack 类型的 顺序, 先入后出

先定义 的 defer 会 最后被执行

理解 defer 执行 时机

defer 执行 还是 比较有特色的, 需要 特殊记忆

package mainimport "fmt"func main() {defer fmt.Println("world1")defer fmt.Println(fmt.Println("world2"))fmt.Println("hello")return fmt.Println("finally")
}
# output:
world2
hello
7 <nil>
world1

defer 用与 关闭文件


func CopyFile(dstName, srcName string) (written int64, err error) {src, err := os.Open(srcName)if err != nil {return}defer src.Close()dst, err := os.Create(dstName)if err != nil {return}defer dst.Close()return io.Copy(dst, src)
}
http://www.lryc.cn/news/241850.html

相关文章:

  • Log4j2.xml不生效:WARN StatusLogger Multiple logging implementations found:
  • 【LeetCode】挑战100天 Day14(热题+面试经典150题)
  • VMware安装windows操作系统
  • 历时半年,我发布了一款习惯打卡小程序
  • 被DDOS了怎么办 要如何应对
  • 时间序列预测实战(十七)PyTorch实现LSTM-GRU模型长期预测并可视化结果(附代码+数据集+详细讲解)
  • 【免费使用】基于PaddleSeg开源项目开发的人像抠图Web API接口
  • Centos7 Python环境和yum修复
  • Ubuntu下使用protoBuf
  • AT89S52单片机
  • 数字孪生智慧校园 Web 3D 可视化监测
  • Python Web框架的三强之争:Flask、Django和FastAPI
  • 本地缓存与分布式缓存
  • LabVIEW如何获取波形图上游标所在位置的数值
  • 八股文面试day6
  • 【Unity】EventSystem.current.IsPointerOverGameObject()对碰撞体起作用
  • 形态学操作—闭运算
  • HEVC-SCC rgb file input
  • XG916Ⅱ轮式装载机后驱动桥设计机械设计CAD
  • pcr扩增原理中的变性 退火 延申扩增
  • C语言——输入一个4位正整数,输出其逆数。
  • jQuery_02 引入jQuery,初试牛刀
  • pandas获取年月第一天、最后一天,加一秒、加一天、午夜时间
  • Unsupervised Condition GAN
  • Crypto(11)HECTF-rsarsa(明文存在线性关系)
  • 论文阅读 Forecasting at Scale (二)
  • 刷题感悟w
  • 记一次linux操作系统实验
  • java操作富文本插入到word模板
  • JMeter---BeanShell实现接口前置和后置操作