Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go 语言中 defer 使用时有哪些陷阱?

Go 语言中 defer 使用时有哪些陷阱?

作者头像
frank.
发布于 2024-01-10 08:45:59
发布于 2024-01-10 08:45:59
15200
代码可运行
举报
运行总次数:0
代码可运行

01 、介绍

defer 的使用方式是在其后紧跟一个函数调用或方法调用,确保在其所在的函数体返回之前执行其调用的函数或方法。

在 Go 语言中,defer 一般用于资源释放,或使用 defer 调用一个匿名函数,在匿名函数中使用 recover() 处理异常 panic

在使用 defer 时,也很容易遇到陷阱,本文我们介绍使用 defer 时有哪些陷阱。

02、defer 陷阱

defer 语句不可以在 return 语句之后。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func main() {
 name := GetUserName("phper")
 fmt.Printf("name:%s\n", name)
 if name != "gopher" {
  return
 }
 defer fmt.Println("this is a defer call")
}

func GetUserName(name string) string {
 return name
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name:phper

阅读上面这段代码,我们在 return 语句之后执行 defer 语句,通过输出结果可以发现 defer 语句调用未执行。

虽然 defer 可以在函数体中的任意位置,我们也是需要特别注意使用 defer 的位置是否可以执行。

defer 语句执行匿名函数,参数预处理。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func main() {
 var count int64
 defer func(data int64) {
  fmt.Println("defer:", data)
 }(count + 1)
 count = 100
 fmt.Println("main:", count)
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main: 100
defer: 1

阅读上面这段代码,首先我们定义一个类型为 int64 的变量 count,然后使用 defer 语句执行一个匿名函数,匿名函数传递参数为 count + 1,最终 main 函数输出 100,defer 执行的匿名函数输出 1

因为在执行 defer 语句时,执行了 count + 1,并先将其存储,等到 defer 所在的函数体 main 执行完,再执行 defer 语句调用的匿名函数的函数体中的代码。

03 、总结

本文主要介绍在使用 defer 语句时可能会遇到的陷阱。分别是 defer 语句不可以在 return 语句之后;defer 语句执行的匿名函数,匿名函数的参数会被预先处理。

读者朋友们在使用 Go 语言的 defer 语句时,还遇到过哪些陷阱?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
windows服务器IE浏览器无法上网(出现添加站点)
使用场景:新购买的服务器,打开IE浏览器出现如下图所示,添加受信任站点 解决方法: 1.点击服务器左下角开始图标,找到服务器管理器,然后打开服务器管理器 2找到本地服务器,点击本地服务器,在右侧找到IE增强的安全配置,点击启用 3.管理员和用户都选择关闭,然后点击确定即可 4.去浏览器搜索需要的资源,浏览器可以正常使用,未弹出添加站点
深蓝.
2021/10/03
3K0
杜绝打开浏览器时出现一直添加站点(Windows系统)
问题:在Windows系统中打开浏览器访问网页一直让添加站点 image.png 解决方案: 1.点击 image.png 2.找到服务器管理器,点击打开 image.png 3.打开服务器管理器后点击本地服务器。 image.png 4.点击打开本地服务器后,找到IE增强的安全配置,点击启用。 image.png 5.点击启用后选择把管理员和用户的都关闭,点击确定。 image.png 6.关闭服务器管理器,点开浏览器访问网页就会直接访问了,不用再点击添加站点了。 image.png
逸轩
2021/09/13
1.1K0
windows2016以上版本云服务器开启声音的办法
刚刚发现云服务器没有声音,查找了一些云+社区的解决方法,前面的都可以正常找到,到最后在回到桌面后点开腾讯云代理服务器管理器,硬是怎么都找不到那个服务在哪里,研究了半天才找到,这边就顺着前辈的方案更新一些其他版本的开启方法及路径。
碧海蓝天1
2021/10/29
7.9K0
关闭Windows Server IE增强安全配置 解决Windows服务器无法上网的问题
网友@张同学说自己买了一台云服务器,想要学习windows服务器使用宝塔面板,但是打开默认的IE浏览器后,无论什么网站都打不开。打开网站会出现下图的提示:Internet Explorer增强安全配置正在阻止来自下列网站的内容,网站内容被阻止时继续提示。这样就无法打开宝塔网站下载面板程序了。好吧,这是windows server中IE默认自带的增强安全配置,本意是好意,但是实际使用中往往会难倒一大票人。魏艾斯博客在本文中记录一下这个问题的解决过程。
魏艾斯博客www.vpsss.net
2018/12/28
7.2K0
Windows服务器的基础安全加固方法(2008、2012)
提供Windows Server 2008 R2和Windows Server 2012 R2数据中心版的云主机服务器。由于Windows服务器市场占有率较高的原因,针对Windows服务器的病毒木马等恶意软件较多,且容易获得,技术门槛也较低,因此Windows服务器的安全问题需要格外留意。为了安全地使用Windows云主机,建议应用如下几个简单的安全加固措施。虽然简单,但是已足够防御大部分较常见的安全风险。
会长君
2023/04/26
7.5K0
svn服务器文件保存位置,Windows 部署SVN服务器
1. 双击VisualSVN-Server-3.9.0-x64.msi准备安装,点击“Next”
全栈程序员站长
2022/09/09
6.6K0
windows 上搭建 web 服务器
选择并进入“程序”,双击“启用或关闭 Windows 服务”,在弹出的窗口中选择“Internet Information Services”下面所有地选项,点击确定后,开始更新服务。
Cell
2022/02/25
17K0
windows 上搭建 web 服务器
Windows服务器使用IIS部署Vue+Flask网页项目
最近嫖了一个服务器,想把项目放到服务器上,搞了一天半啥也没弄出来,光服务器就重置了好几次,后来理清了思路,很快就部署好了,现记录一下,防止以后忘记。 我嫖的是腾讯云的轻量服务器,第一次使用,所以还是选择了自己熟悉的Windows系统。
Marigold
2022/06/17
4.1K0
Windows服务器使用IIS部署Vue+Flask网页项目
腾讯云堡垒机文件上传下载
背景:已经完成了堡垒机基本配置之后,运维人员已经可以访问到相应的资源机,但是运维工作需要向资源机上传下载文件要如何操作了要如何管控,接下来介绍下使用堡垒机如何向资源机上传或下载文件
陈游生
2021/03/09
12.8K0
腾讯云堡垒机文件上传下载
在服务器(Windows)中开启声音
1.使用远程桌面连接服务器,进入服务器以后右键单击开始,选择运行 image.png 2. 点击运行之后,在输入框内输入:gpedit.msc image.png 3、打开之后,依次点击:计算机配置--管理模板--windows组件--远程桌面服务--远程桌面会话主机--设备和资源重定向--左键双击允许音频录制重定向--选择已启用后点应用。 image.png image.png image.png image.png image.png 4.点击服务器管理器,找到工具,打开服务 image.png ima
逸轩
2021/10/29
16.7K0
服务器使用本地麦克风(服务器内通过微信使用语言通话)
1. 首先需要在本地mstsc的本地资源>远程音频设置选择如下配置 点击显示选项 image.png 选择本地资源,点击设置 image.png 做如下设置 image.png 2.登录服务器后,选择服务器管理器,点击添加角色和功能 image.png 选择下一步 image.png 点击下一步 image.png 点击下一步 image.png 选择远程桌面服务,点击下一步 image.png 选择下一步 image.png 选择下一步 image.png 选择远程桌面会话主机 image.png 点击添
逸轩
2021/10/29
4.6K0
【轻量应用服务器】是如何搭建跨境电商管理环境?
Windows Server 是微软推出的 Windows 服务器操作系统,适合于部署各类企业应用,可运行 ASP.NET 等开发环境以及 SQL Server 等数据库。本文以 Windows Server 2012 R2 中文版系统镜像为例,介绍如何搭建跨境电商环境。
TCS-F
2021/11/01
3K0
【轻量应用服务器】是如何搭建跨境电商管理环境?
通过fiddler抓包获取自动登录的cookie – 适用于微信类应用及小程序等
提要:本文讲解了两部分内容:1、如何设置fiddler抓包https,2、如何设置自动获取小程序的登录信息。
富泰科
2022/04/06
8.4K0
IDEA添加并配置Tomcat服务器
环境说明: 系统:Win10专业版 JDK版本:1.8 Tomcat版本:8.5.57 开发环境:IDEA 2020.03 Ultimate
知识分子没文化
2023/07/01
15.2K0
IDEA添加并配置Tomcat服务器
浏览器安全(上)
对于浏览器用户来说,访问网络资源只需要一台个人终端,终端有可运行浏览器的操作系统、浏览器应用、连通互联网,互联网连接可用的服务,这便是整体运行环境,其中任何环节被攻击都有可能带来安全问题,根据上诉描述,从微观到宏观、从局部到整体来对安全分类
醉酒鞭名马
2020/06/08
2.2K1
浏览器安全(上)
微信出现数据库损坏怎么办?如何恢复数据
1、微信数据库损坏可能是存储空间不足。微信数据文件发现有损坏,是由于内存储空间不足导致的,从遇到这个问题的用户来看,在微信崩溃之前没有什么特别显著的提醒,在选择修复后所有的联系人跟聊天记录都没有了。
七辰
2023/10/05
5.5K0
微信出现数据库损坏怎么办?如何恢复数据
云服务器开启声音的办法
云服务器没有声音是一件很烦恼的事情,那么今天小编给大家分享一下服务器开启声音的方法!
用户5702163
2019/07/18
22.5K0
[5分钟玩转Lighthouse]用Matomo搭建网站流量统计系统
最近在尝试搭建博客,经过一番调研后,发现UP主溪歪歪_BILI的教学视频“如何搭建第一个博客站点”,用轻量应用服务器可以很快实现一个WordPress博客站点的搭建,搭建过程清晰明了,省时省力。但当搭建好博客后,想要对站点访问数据进行统计和观察又成为了一个问题。市面上很多相关软件,但不是功能支持不好就安全性不佳,要么就是要收费。最近轻量应用服务器推出了Matomo镜像,可以直接通过简单的初始化设置,就很好地实现对站点统计功能的支持,而且用起来很流畅。
啃鹿的瓜
2022/05/30
7.4K5
如何在浏览器中快速将网络资源传至 COS ?
COSBrowser Uploader 是一款浏览器的扩展程序,目前只支持 Chrome 浏览器。
wonders
2021/03/25
2.9K1
如何在浏览器中快速将网络资源传至 COS ?
【玩转腾讯云】四.使用云服务器CVM轻松部署Node.js
②选择自定义配置——计费模式为“按量付费”——地域选择“北京”——可用区选择“随机可用区”——网络选择“默认”即可
一只特立独行的兔先生
2020/04/04
9.2K2
【玩转腾讯云】四.使用云服务器CVM轻松部署Node.js
推荐阅读
相关推荐
windows服务器IE浏览器无法上网(出现添加站点)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验