golang defer
文章目录
- 延迟函数的参数在defer语句出现时就已经确定下来了
- 延迟函数没有入参时,延迟函数体内的变量会受到影响
- 延迟函数 *可以* 修改主函数的 *具名* 返回值
- 延迟函数 *无法* 修改主函数的 *匿名* 返回值
defer会把声明的 延迟函数以及 函数的入参放到栈上,当外部的包含方法return之前,返回参数到调用方法之前调用。在defer语句声明的时候入参就已经确定下来了,所以如果要传入指定参数那么就要在defer前给入参赋值。
延迟函数的参数在defer语句出现时就已经确定下来了
type struct student{name string
}
func (st *student)fn(){fmt.Println(st.name)st.name = "zhangsan"return
}
defer 会打印 空字符串,name 的值在defer语句声明的时候就已经确定下来了,即拷贝了一份存到了栈上,后面的修改不会影响已经拷贝的数据。
延迟函数没有入参时,延迟函数体内的变量会受到影响
type struct student{name string
}
func (st *student)fn(){defer func(){fmt.Println(st.name)}()st.name = "zhangsan"return
}
defer 打印 zhangsan,name并没有当做参数传进去,defer只是保存了一份匿名函数在栈上,执行匿名函数的时候才会去找name的值。
延迟函数 可以 修改主函数的 具名 返回值
func fn() (result int) {i := 1defer func() {result++}()return i
}
fn()返回 2。关键字return不是一个原子操作,实际上return只代理汇编指令ret,即将跳转程序执行;return实际上分两步:首先将 i 存入栈中作为返回值,然后跳转程序执行,而defer的执行时机正是跳转前,所以说defer执行时还是有机会操作返回值的。
即: result = i --> result++ --> return
延迟函数 无法 修改主函数的 匿名 返回值
func fn() int {var i intdefer func() {i++}()return i
}
上面的函数,返回一个局部变量,同时defer函数也会操作这个局部变量。对于匿名返回值来说,可以假定仍然有一个变量存储返回值,假定返回值变量为“anony”,上面的返回语句可以拆分成一下过程。 anony = i --> i++ --> return;由于匿名返回值anony的值在defer修改 i 前就已经确定了,所以defer语句中修改i值,对函数返回值不造成影响。
相关文章:
golang defer
文章目录延迟函数的参数在defer语句出现时就已经确定下来了延迟函数没有入参时,延迟函数体内的变量会受到影响延迟函数 *可以* 修改主函数的 *具名* 返回值延迟函数 *无法* 修改主函数的 *匿名* 返回值defer会把声明的 延迟函数以及 函数的入参放到栈上,…...
【Java】线程的死锁和释放锁
线程死锁是线程同步的时候可能出现的一种问题 文章目录1. 线程的死锁1.1 基本介绍1.2 应用案例2. 释放锁2.1 下面的操作会释放锁2.2 下面的操作不会释放锁1. 线程的死锁 1.1 基本介绍 多个线程都占用了对方的锁资源,但不肯相让,导致了死锁,…...
如何使用断点续传上传大文件
概念 大文件上传的需求介绍 不管怎样简单的需求,在量级达到一定层次时,都会变得异常复杂。 文件上传简单,文件变大就复杂 上传大文件时,以下几个变量会影响我们的用户体验 服务器处理数据的能力请求超时网络波动 上传时间会变长…...
【图神经网络】图拉普拉斯滤波器如何实现全通、低通、高通滤波
【图神经网络】图拉普拉斯滤波器如何实现全通、低通、高通滤波 文章目录【图神经网络】图拉普拉斯滤波器如何实现全通、低通、高通滤波1. 前言2. 符号说明3. 三种滤波3.1 全通滤波3.2 低通滤波3.2.1 平滑信号分析3.2.2 广义拉普拉斯平滑滤波器3.3 高通滤波4. 总结1. 前言 GCN&…...
python操作mysql数据库详解
使用Python操作MySQL数据库 MySQL是一种关系型数据库管理系统,它可以用来存储和管理大量的数据。之前介绍了大部分主流数据库,今天将介绍如何使用Python来操作MySQL数据库。 安装MySQL 首先,我们需要安装MySQL服务器,可以从MyS…...
netty群聊系统
1设计思路:启动一个服务端,多个客户端第一个客户端启动时,会告诉服务器上线了第二个客户端启动时,告诉服务器上线,并且通知第一个启动的客户端第三个客户端启动时,告诉服务器上线,并且通知第一个…...
Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 SharedPreferences 是 Android 平台上轻量级的 K-V 存储框架,亦是初代 K-V 存储框架,至今被很多应用沿用。 有的…...
在windows中使用tomcat搭建Jenkins
1、 准备环境:JDK JDK官网下载:https://download.oracle.com/java/19/latest/jdk-19_windows-x64_bin.msi 2、 tomcat包 tocat官网下载:https://tomcat.apache.org/download-90.cgi 3、 Jenkins.war包 Jenkins官网下载:https://mi…...
Linux系统
linux系统 世界上最重要的服务器端操作系统。 创建新目录 mkdir app mkdir -m 目录权限 目录名 创建有权限的目录名。 创建一个空白文件 touch app.txt创建一个文件。 cat创建一个文件。 vi/vim创建一个文件。 nano创建一个文件。 truncate创建一个文件。 pwd查看当前目录。 rm…...
Mel Frequency Cepstral Coefficients (MFCCs)
wiki里说 在声音处理中,梅尔频率倒谱( MFC ) 是声音的短期功率谱的表示,基于非线性梅尔频率标度上的对数功率谱的线性余弦变换。 倒谱和MFC 之间的区别在于,在 MFC 中,频带在梅尔尺度上等距分布,这比正常频谱中使用的线…...
第七讲---贪心(上课)
1.股票买卖 一、贪心 考虑一种方案,在每次上升的前一天购入股票,并在上升后的当天卖出的方案 if (w[i] > w[i - 1])res w[i] - w[i - 1];接下来证明该贪心思路得出的方案即是最优解。 (1)证明贪心解 ≥ 最优解: …...
计算机如何思考与图灵完备
图灵完备是针对一套数据操作规则而言的概念,数据操作规则可以是一门编程语言,也可以是计算机实现里面的指令集,比如C/C++是图图灵完备的,通用CPU也是图灵完备的,但是GPU却不一定是图灵完备的。说白了图灵完备定义了一套规则,当这套规则可以实现图灵迹模型里的全部功能时,…...
惠普LaserJet M1005 MFP报错b2
故障现象: 惠普LaserJet M1005 MFP开机后直接报b2错误; 检测维修: 故障大意是:机器的硬件可能出现点突变,此问题建议联系当地维修中心进行处理。...
网络协议(TCP/IP)
目录一、网络分层模型二、OSI模型三、网络传输原理四、TCP/IP1、TCP/IP 原理2、TCP 三次握手/四次挥手3、Http协议和TCP/IP的区别五、HTTP原理六、HTTPS原理七、CDN原理一、网络分层模型 互联网的本质就是一系列的网络协议,最早由ISO国际组织定义为7层网络参考模型…...
2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书
2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux&#…...
6、流程控制
目录一、if二、switch三、for四、break与continue五、goto与Label一、if if使用:逻辑表达式成立,就会执行{}里的内容;逻辑表达式不需要加() if 5 > 9 {fmt.Println("5>9") }if句子中允许包含1个(仅1个)分号:在分…...
Linux中最基本常见命令总结
❤❤💛💛💚💚💙💙💜💜您的认可是对我最大的帮助💜💜💙💙💚💚💛💛❤❤ 🤎&…...
Python学习-----模块2.0(常用模块之时间模块-->time)
目录 前言: time简介 导入模块 1.时间戳 2.时间元组 (1)把时间戳转换为元组形式 (2)元组转换为时间戳输出 (3)把元组转换为格式化时间 (4)把时间戳转换为格式化时间…...
XXL-JOB分布式任务调度框架(二)-策略详解
文章目录1.引言2.任务详解2.1.执行器2.2.基础配置3.路由策略(第一个)-案例4.路由策略(最后一个)-案例5.轮询策略-案例6.随机选取7.轮询选取8.一致性hash9.最不经常使用 (LFU)10.最近最久未使用(LRU)11.故障转移12.忙碌转移13.分片广播任务14.父子任务15.…...
JAVA练习54-最小栈
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-最小栈 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月18日练习内容…...
基于T4技术栈的现代全栈应用开发实践与最佳实践解析
1. 项目概述:一个现代全栈应用的原型与起点最近在GitHub上看到一个挺有意思的项目,叫timothymiller/t4-app。乍一看这个名字,可能有点摸不着头脑,但点进去你会发现,这其实是一个精心设计的全栈Web应用模板。它不是某个…...
做定制开发的定制软件开发公司平台
在数字化转型浪潮下,“定制软件开发”几乎成了每一家力图通过技术构建壁垒的企业的必选项。然而,一个令人尴尬的现实是:很多企业在数字化上砸了重金,不仅没换来效率,反而陷入了“开发超预算、交付总延期、上线全是坑”…...
企业内网应用如何安全合规地集成外部大模型API服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内网应用如何安全合规地集成外部大模型API服务 在构建内部AI工具时,企业开发团队面临一个核心挑战:如何…...
3分钟掌握Word转HTML:Mammoth.js让你的文档转换变得如此简单
3分钟掌握Word转HTML:Mammoth.js让你的文档转换变得如此简单 【免费下载链接】mammoth.js Convert Word documents (.docx files) to HTML 项目地址: https://gitcode.com/gh_mirrors/ma/mammoth.js 在现代办公和内容管理中,Word转HTML的需求无处…...
深入理解STM32的FSMC:如何像操作SRAM一样轻松点亮你的TFTLCD屏幕
深入理解STM32的FSMC:如何像操作SRAM一样轻松点亮你的TFTLCD屏幕 在嵌入式开发领域,TFTLCD屏幕的驱动一直是让开发者又爱又恨的难题。传统的GPIO模拟时序方式虽然简单直接,但在高分辨率屏幕和复杂应用场景下往往力不从心。这时,S…...
鸿蒙系统安装
一、下载 DevEco Studio 打开华为开发者官网,找到 DevEco Studio 6.1.0 Release 下载页面。 DevEco Studio for Windows 6.1.0.830(2.8GB) 下载。 Mac 用户可以选择对应版本(x86/ARM)。 等待下载完成,得到 .exe 安装文件。二、安装…...
PFC2D几何操作避坑指南:geometry命令导出STL成功,DXF却报错?手把手教你排查
PFC2D几何操作避坑指南:geometry命令导出STL成功,DXF却报错?手把手教你排查 在岩土工程和颗粒流分析领域,PFC2D/3D作为一款强大的离散元分析软件,其几何操作功能是构建复杂模型的关键。许多用户在尝试使用geometry exp…...
在Nodejs后端服务中集成Taotoken调用大模型API
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Nodejs后端服务中集成Taotoken调用大模型API 对于Node.js后端开发者而言,将大模型能力集成到服务中已成为构建智能应…...
2026年医疗卫生/护理求职AI工具横评:白衣天使的求职神器大比拼
导语 2026年,医疗卫生行业依然是最具社会价值和就业稳定性的行业之一。随着中国老龄化加速,医护人员需求持续扩大,仅公立医院护士岗位需求量就突破200万。然而,医护求职并不轻松:编制紧张、规培政策复杂、职称考试压力…...
AI与建模仿真融合:数字孪生从静态镜像到智能决策的演进
1. 项目概述:当AI遇见建模仿真,数字孪生正在经历什么?最近几年,无论是工业制造、智慧城市还是医疗健康,但凡提到数字化转型,总绕不开“数字孪生”这个词。它就像一个在虚拟世界里为物理实体打造的“克隆体”…...
