Go语言 Defer(延迟)

 本文主要内容为Go语言中defer(延迟)介绍及应用文件读取使用defer的示例。

目录

定义

应用场景

代码示例

改为匿名函数

总结


定义

延迟:关键字,可以用于修饰语句、函数,

确保这条语句可以在当前栈退出的时候执行。

应用场景

1.一般用于做资源清理工作

2.解锁、关闭文件

3.在同一个函数中多次调用defer,执行时类似于栈的机制:先后入后出

代码示例

创建文件读取函数,并设置读取的文件路径为当前路径下的for循环文件。

Defer函数可以保证文件关闭一定会被执行,不管自定义的函数出现异常还是错误。

示例如下:

package mainimport ("fmt""os"
)func main() {filename := "for循环.go"readFile(filename)
}func readFile(filename string) {// func Open(name string) (*File, error) {}// 1.go语言一般会将错误码作为最后一个参数返回// 2.err一般nil代表没有错误,执行成功,非nil表示执行失败f1, err := os.Open(filename)defer f1.Close()if err != nil {fmt.Println("os.Open(", filename, ") ==> 打开文件失败,err:", err)return}buf := make([]byte, 1024)// func (f *File) Read(b []byte) (n int, err error)n, _ := f1.Read(buf)fmt.Println("读取文件的实际长度:", n)fmt.Println("读取文件的内容:", string(buf))
}

运行结果:

 

改为匿名函数

匿名函数,没有名字,属于一次性的逻辑类似于lamada表达式。

把defer的处理改为创建匿名函数,同时调用。

在一个方法或者函数中,可以有多个defer语句,

多个defer语句的执行顺序依照后进先出的原则。

示例如下:

package mainimport ("fmt""os"
)func main() {filename := "for循环.go"readFile(filename)
}func readFile(filename string) {// func Open(name string) (*File, error) {}// 1.go语言一般会将错误码作为最后一个参数返回// 2.err一般nil代表没有错误,执行成功,非nil表示执行失败f1, err := os.Open(filename)// defer f1.Close()defer func(a int) {fmt.Println("准备关闭文件, code:", a)_ = f1.Close()}(100) // 创建一个匿名函数,同时调用if err != nil {fmt.Println("os.Open(", filename, ") ==> 打开文件失败,err:", err)return}defer fmt.Println("倒计时1")defer fmt.Println("倒计时2")defer fmt.Println("倒计时3")buf := make([]byte, 1024)// func (f *File) Read(b []byte) (n int, err error)n, _ := f1.Read(buf)fmt.Println("读取文件的实际长度:", n)fmt.Println("读取文件的内容:", string(buf))
}

运行结果:

总结

本文主要内容为Go语言中defer(延迟)介绍及应用文件读取使用defer的示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/398114.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server端口设置完整详细步骤

​ 大家好,我是程序员小羊! 前言: 前面是对SQLserver服务器一些介绍,不想了解的可直接点击目录跳入正题,谢谢!!! SQL Server 是由微软公司开发的关系数据库管理系统 (RDBMS)。它主要…

c++33 一级指针 字符串

拿到buf5 内存的首地址来释放内存 所以buf5不可改变 为了保证局部变量内存的局部性 字符串指针1级 如果没有拷入\0 则b还为一个数组 字符串拷贝函数 主调函数分配到内存 把g后面的内存变成\ 0 所以就改变了内存空间 考虑:主调用函数分配内存供被调用函数…

Python爬虫开发:BeautifulSoup、Scrapy入门

在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非…

FL Studio 24.1.1.4239中文破解版的安装激活详细教程

在数字音乐制作领域,FL Studio一直以其强大的功能和用户友好的界面而备受赞誉。随着技术的不断进步和音乐制作需求的日益增长,FL Studio 21.2.3的发布无疑为音乐创作者们带来了更为广阔的创作空间和更高效的制作工具。本文旨在深入探讨FL Studio 21.2.3的…

关于k8s的pvc存储卷

目录 1.PVC 和 PV 1.1 PV 1.2 PVC 1.3 StorageClass 1.4 PV和PVC的生命周期 2.实战演练 2.1 创建静态pv 2.2 创建动态pv 3.总结 1.PVC 和 PV 1.1 PV PV 全称叫做 Persistent Volume,持久化存储卷。它是用来描述或者说用来定义一个存储卷的,…

2024 年 7 月公链行业研报:市场波动中 Solana 表现抢眼,Layer 2 竞争白热化

作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics 公链 Research 页面 7 月份,加密货币市场表现活跃,波动幅度较大,这一现象映射了全球金融市场的整体趋势。现货以太坊 ETP 在美国的上市&…

k8s 部署RuoYi-Vue-Plus之minio搭建

1.直接部署一个pod 需要挂载存储款, 可参考 之前文章设置 https://blog.csdn.net/weimeibuqieryu/article/details/140183843 2.部署yaml 创建部署文件 minio-deploy.yaml apiVersion: v1 kind: PersistentVolume metadata:name: minio-pvnamespace: ruoyi #使用ns ruoyi s…

无字母数字webshell之命令执行

目录 1.源码 2.题目解析 3.利用方法 3.1 PHP7下如何实现 3.2PHP5下如何实现 3.2.1 shell下可以利用. 来执行任意脚本 3.2.2 Linux文件名支持用glob通配符代替 1.题目源码 <?php if(isset($_GET[code])){$code $_GET[code];if(strlen($code)>35){die(&q…

本地phpstudy部署算命系统,用户端是H5页面,支持微信支付宝支付,支持微信支付宝登录

算命系统本地部署教程 0. 技术架构1. 启动Apache、MySQL服务2. 创建前台和后台两个网站3. Navicat连接数据库4. 登录后台是长这个样子5. 登录前台登录样子6. 代码结构是 0. 技术架构 前端&#xff1a;HTMLCSSJquery 后端&#xff1a;PHP 数据库&#xff1a;MySQL 1. 启动Ap…

C# OnnxRuntime部署LivePortrait实现快速、高质量的人像驱动视频生成

目录 效果 说明 项目 模型信息 代码 下载 效果 LivePortrait实现快速、高质量的人像驱动视频生成 说明 官网地址&#xff1a;https://github.com/KwaiVGI/LivePortrait 代码实现参考&#xff1a;https://github.com/hpc203/liveportrait-onnxrun 模型下载&#xff1a;…

Haproxy简介及配置详解

一、Haproxy简介 官网&#xff1a; 企业版网站: https://www.haproxy.com 社区版网站: http://www.haproxy.org github: https://github.com/haprox Haproxy是法国人Willy Tarreaus开发的一款开源软件&#xff0c;能够提供高性能、负载均衡以及基于HTTP和TCP应用个代理&…

python-flask-上传多个文件并存储

本地环境&#xff1a;win10 / centos6 &#xff0c; python3 flask入门看这里&#xff1a; ↓ python-flask结合bootstrap实现网页小工具实例-半小时速通版_bootstrap flask-CSDN博客 https://blog.csdn.net/pxy7896/article/details/137854455 动态添加和删除表格中的行&…

【实用工具】Stirling-PDF: 优质开源的PDF处理工具/编辑工具-含入门安装教程

文章目录 项目简介功能展示Page Operations 页面操作Conversion Operations 转换操作Security & Permissions 安全与权限Other Operations 其他业务 如何安装并使用Docker RunDocker Compose 项目简介 这是一款使用 Docker 的基于本地托管网络的强大 PDF 操作工具。它能让…

头狼择校小程序

综述介绍 头狼择校&#xff0c;是头狼择™高校的简称&#xff0c;我们专注高校、大学的择校。倡导先嗅就业再择校&#xff0c;是预约工具和对话平台。帮您嗅招办、嗅教授、嗅学姐&#xff0c;预约择校有关的老师、顾问&#xff0c;助力考大学和考研的“双考”学生及家长了解就…

「OC」暑假第二周——3Gshared的仿写与学生管理系统

「OC」暑假第二周——3Gshared的仿写与学生管理系统 文章目录 「OC」暑假第二周——3Gshared的仿写与学生管理系统3Gshared登陆注册页面首页搜索推荐和活动我的我的推荐和我推荐的我的信息 设置 学生管理系统登陆注册界面主页面增删改查以及排序 总结 3Gshared 登陆注册页面 这…

【NetTopologySuite类库】创建可变距离的缓冲区

介绍 API地址 沿直线在每个顶点处创建具有不同缓冲区距离的缓冲区多边形。 只支持线作为输入&#xff0c;因为缓冲区宽度通常需要为每条线单独指定。 示例 var wkt "linestring(0 0,1 0, 2 0,3 1,4 1,5 1,6 -1,7 -1,8 -1)"; var r new WKTReader(); var g r.…

物资管理系统

可用于期末作业或Java课设 系统功能主要包括&#xff1a; 管理员管理&#xff0c;可以进行管理员信息的添加修改和删除以及修改密码。 客户管理&#xff1a;可以进行客户信息的增删查改&#xff0c;也可以进行物资的租赁。 建材管理&#xff1a;可以查看建材的库存数量…

Spring MVC框架学习笔记

学习视频:10001 Spring MVC概述_哔哩哔哩_bilibili~11005 请求映射方式_哔哩哔哩_bilibili 目录 1.概述 Java EE三层架构 Spring MVC在三层架构中的位置 ​编辑 Spring MVC在表现层的作用 Spring MVC的特点 2.Spring MVC入门程序 代码实现 Spring MVC工作原理 Spring …

《Java编程自学:核心概念与技巧》 第1章: 对象的本质

《Java编程自学&#xff1a;核心概念与技巧》 第1章&#xff1a; 对象的本质 《Java编程自学&#xff1a;核心概念与技巧》第2章 启程&#xff1a;Hello, World&#xff01;的探索之旅 1.1 从机器视角到问题视角的演变 在计算机科学的发展历程中&#xff0c;我们见证了从机器…

基于STM32的智能宠物喂食器

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 宠物定时喂食远程控制喂食常见问题及解决方案 常见问题解决方案结论 1. 引言 智能宠物喂食器可以通过定时和远程控制&#xff0c;实现对宠物的科学喂养。本文将…