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

Golang中的 defer 关键字和Python中的上下文管理with关键字

defer,中文意思是:推迟

常用用于关闭文件操作,简而言之,就是try/finally的一种替代方案

使用示例

package mainimport "fmt"func main() {defer fmt.Println("执行延迟的函数")fmt.Println("执行外层函数")
}

执行结果

执行外层函数
执行延迟的函数

我们在代码中加入一个除零操作,引发异常

package mainimport "fmt"func main() {defer fmt.Println("执行延迟的函数")var a int = 0var b int = 2r := b / afmt.Println("执行外层函数", r)
}

通过执行结果,可以看到:程序发生异常了,defer语句也是会执行的

执行延迟的函数
panic: runtime error: integer divide by zerogoroutine 1 [running]:
main.main()/Users/Desktop/main.go:11 +0x6c
exit status 2

和Python中的上下文管理with关键词很类似的功能

class Foo():def __enter__(self):print('__enter__')return selfdef __exit__(self, exc_type, exc_value, exc_tb):print('__exit__')if __name__ == '__main__':with Foo() as foo:a = 1/0print('do something')
__enter__
__exit__
Traceback (most recent call last):File "/Users/Desktop/demo.py", line 11, in <module>a = 1/0
ZeroDivisionError: division by zero

Golang的文件读取操作

package mainimport ("os"
)func main() {file, _ := os.Open("demo.txt")defer file.Close()// do something
}

Python的文件读取

def main():with open('demo.txt', 'r') as f:passif __name__ == '__main__':main()

比较下来,发现:

  1. Python中通过上下文管理的概念来实现文件关闭操作;
  2. golang中没有引入新的概念,处理起来更为方便。

参考

  • Python with/as和contextlib上下文管理使用说明
  • 掌握 Go 语言的 defer 关键字

相关文章:

  • 数据治理-数据标准演示
  • 5岁幼儿编程:开启未来的神秘之门
  • 数据库(15)——DQL分页查询
  • npm install 出错,按照版本不匹配解决
  • springboot针对返回的response拦截处理越权问题
  • 本地电脑通过远程服务器进行ssh远程转发
  • 高考后的赚钱新路径:千行赏金助你开启财富之旅
  • MySQL之创建高性能的索引(四)
  • 超大功率光伏并网逆变器学习(三相)
  • CentOS8安装opensips-cli
  • Nginx:怎么携带参数重定向
  • 三方语言中调用, Go Energy GUI编译的dll动态链接库CEF
  • 启动u盘恢复成普通u盘
  • 关于 c++ cout << endl; 的源码解释
  • 了解VS安全编译选项GS
  • @jsonView过滤属性
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Angular6错误 Service: No provider for Renderer2
  • CSS相对定位
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTTP中GET与POST的区别 99%的错误认识
  • react 代码优化(一) ——事件处理
  • Vue UI框架库开发介绍
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 码农张的Bug人生 - 初来乍到
  • 前端面试之闭包
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 深度学习入门:10门免费线上课程推荐
  • 实习面试笔记
  • 数据可视化之 Sankey 桑基图的实现
  • 物联网链路协议
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十一)c52学习之旅-动态数码管
  • (四)鸿鹄云架构一服务注册中心
  • (推荐)叮当——中文语音对话机器人
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)我也是一只IT小小鸟
  • .bat批处理出现中文乱码的情况
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .Net7 环境安装配置
  • .NET程序员迈向卓越的必由之路
  • .net连接oracle数据库
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解