Golang之Shadowed Variables(幽灵变量)
这几天在集成项目的静态代码检查golangci-lint工具时,在go vet配置中遇到check-shadowing开关,仔细了解了下。博主在学go之前是用java的,所以对于代码块和代码作用域是有一定的了解,而且之前学习go的时候遇到过这个情况,默认当作语法来处理,但是今天发现社区对这种用法的变量定义为幽灵变量。
什么是幽灵变量
简单来说就是在上级代码块申明并赋值某个变量后,在下一级代码块中再申明并赋值这个变量时,这两个代码块的变量地址和值不是同一个。
这样来说可能比较抽象,下面举个例子:
输出结果如下:
解释:其实在for循环通过:=重新申明了一个新的变量,它在申明语句到打印语句的范围内隐藏了原始的num,新变量的作用域只在这个范围内。
改写如下:
那我们怎么去发现项目中的幽灵变量呢?主要有两种方法:1.编译器支持。比如goland会用警告提示变量是幽灵变量,并提供导航到最初申明变量的地方;2.go vet (golangci-lint)。在提交代码的时候,使用go vet来检查一下代码是否存在此类问题
排查方法
编译器
代码检测
使用go vet可以检测出来,不过从工程化角度来说,更推荐用golangci-lint,通过配置go vet来检测。golangci-lint的关键go vet配置如下:
使用golangci-lint检测未改进的代码:
Golang之Shadowed Variables(幽灵变量)相关推荐
- mysql variables_通过什么命令能够改变mysql的variables的变量里的值?
展开全部 1.假如用户输入的姓名和年龄32313133353236313431303231363533e78988e69d8331333365633839值分别保存在变量name,age中: char ...
- MySQL之Variables(变量)
变量 系统变量:全局变量.会话变量 自定义变量:用户变量.局部变量 系统变量:由系统提供,属于服务器层面 PS:全局级别:GLOBAL 会话级别:SESSION 默认为SESSION ①查看所有的系统 ...
- Broadcast Variables广播变量
Flink Broadcast Variables: Broadcast variables允许你创建一个数据集在所有的并行操作节点都能获取到,除了常规的输入操作.针对一些小的依赖数据集,这种方式是非 ...
- 【无标题】ubuntu22.04 golang安装和配置环境变量
下载golang 链接: golang下载 执行命令 rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.1.linux-amd ...
- Go语言自学系列 | golang并发编程之原子变量的引入
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- 国美金融贷款Local Variables本地变量,国美金融贷款Java虚拟机
国美金融贷款每个frame都包含一个称为其本地局部变量的变量数组.国美金融贷款frame的局部变量数组的长度是在编译的时候确定的. 国美金融贷款单个局部变量可以保存以下类型的值:boolean, by ...
- golang安装:GOPATH环境变量无需配置说明(>1.13)
- golang重复声明变量
golang使用简短方式声明变量,左侧必须要有一个新变量,变量也可以重复声明. func main() {test1 := 0test1, test2:= 1, 2 test1:= 3 //错误 } ...
- Python中的虚拟变量(dummy variables)
虚拟变量(dummy variables) 虚拟变量,也叫哑变量和离散特征编码,可用来表示分类变量.非数量因素可能产生的影响. ① 离散特征的取值之间有大小的意义 例如:尺寸(L.XL.XXL) 离散 ...
最新文章
- Gartner:人工智能将促使部分专业工作转型
- 用户月活跃度在哪里可以查_2020年12月计算机等级考试报名时间,另外11月6号可以查9月考试成绩...
- Shell--shell中的判断
- linux 安装系统划分lvm分区
- ERP系统实施过程问题概览
- C#中的默认访问修饰符
- 宁夏计算机专科大学排名,2019年民办学校排行榜_科普2019年宁夏专科学校排名及2019宁夏民办高校排...
- mysql php apache源码_配置php结合Apache
- g5420核显驱动win7_9102年了,该怎么装Win7 ???
- 行列转换的帖子mysql_[转载]mysql行列转换方法总结 (转)
- centos7 mysql启动失败_Mysql主从复制
- 微软破常规发LNK漏洞补丁 金山卫士完美修复
- ajax communication failed,AJAX没有收到错误
- Linux 下自动化脚本安装Jdk、Nginx等软件
- 浅谈-国标GB28181协议抓包内容分析(一)
- 计算机水平拼音怎么写,电脑上的拼音到底是怎么敲出来的
- 浏览器linux2019,2019火狐浏览器
- [SPSS]典型相关分析的SPSS实现——开卷和闭卷学科成绩的典型相关分析实例
- html的px和屏幕什么关系,Html字体大小的设置单位PT与PX区别
- 2013年9月中秋云南昆明、丽江、泸沽湖、香格里拉、梅里雪山、虎跳峡之旅
热门文章
- 《TCP/IP网络编程》第20章
- 全国绿色计算大赛 模拟赛第三阶段
- mars3d中时间的转换
- R语言自动提取新闻摘要的简单实现
- 吴军《数学之美》-读书笔记
- 解决:ERROR: Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurat
- Kotlin: Classifier ‘Demo1‘ does not have a companion object, and thus must be initialized here
- 13个创意爆棚的广告图片
- LaTex技巧:用PPT画图,然后导入LaTeX
- GB/T 20281-2020实施两周年,美创数据库防火墙的标准实践