这几天在集成项目的静态代码检查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(幽灵变量)相关推荐

  1. mysql variables_通过什么命令能够改变mysql的variables的变量里的值?

    展开全部 1.假如用户输入的姓名和年龄32313133353236313431303231363533e78988e69d8331333365633839值分别保存在变量name,age中: char ...

  2. MySQL之Variables(变量)

    变量 系统变量:全局变量.会话变量 自定义变量:用户变量.局部变量 系统变量:由系统提供,属于服务器层面 PS:全局级别:GLOBAL 会话级别:SESSION 默认为SESSION ①查看所有的系统 ...

  3. Broadcast Variables广播变量

    Flink Broadcast Variables: Broadcast variables允许你创建一个数据集在所有的并行操作节点都能获取到,除了常规的输入操作.针对一些小的依赖数据集,这种方式是非 ...

  4. 【无标题】ubuntu22.04 golang安装和配置环境变量

    下载golang 链接: golang下载 执行命令 rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.1.linux-amd ...

  5. Go语言自学系列 | golang并发编程之原子变量的引入

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  6. 国美金融贷款Local Variables本地变量,国美金融贷款Java虚拟机

    国美金融贷款每个frame都包含一个称为其本地局部变量的变量数组.国美金融贷款frame的局部变量数组的长度是在编译的时候确定的. 国美金融贷款单个局部变量可以保存以下类型的值:boolean, by ...

  7. golang安装:GOPATH环境变量无需配置说明(>1.13)

  8. golang重复声明变量

    golang使用简短方式声明变量,左侧必须要有一个新变量,变量也可以重复声明. func main() {test1 := 0test1, test2:= 1, 2 test1:= 3 //错误 } ...

  9. Python中的虚拟变量(dummy variables)

    虚拟变量(dummy variables) 虚拟变量,也叫哑变量和离散特征编码,可用来表示分类变量.非数量因素可能产生的影响. ① 离散特征的取值之间有大小的意义 例如:尺寸(L.XL.XXL) 离散 ...

最新文章

  1. Gartner:人工智能将促使部分专业工作转型
  2. 用户月活跃度在哪里可以查_2020年12月计算机等级考试报名时间,另外11月6号可以查9月考试成绩...
  3. Shell--shell中的判断
  4. linux 安装系统划分lvm分区
  5. ERP系统实施过程问题概览
  6. C#中的默认访问修饰符
  7. 宁夏计算机专科大学排名,2019年民办学校排行榜_科普2019年宁夏专科学校排名及2019宁夏民办高校排...
  8. mysql php apache源码_配置php结合Apache
  9. g5420核显驱动win7_9102年了,该怎么装Win7 ???
  10. 行列转换的帖子mysql_[转载]mysql行列转换方法总结  (转)
  11. centos7 mysql启动失败_Mysql主从复制
  12. 微软破常规发LNK漏洞补丁 金山卫士完美修复
  13. ajax communication failed,AJAX没有收到错误
  14. Linux 下自动化脚本安装Jdk、Nginx等软件
  15. 浅谈-国标GB28181协议抓包内容分析(一)
  16. 计算机水平拼音怎么写,电脑上的拼音到底是怎么敲出来的
  17. 浏览器linux2019,2019火狐浏览器
  18. [SPSS]典型相关分析的SPSS实现——开卷和闭卷学科成绩的典型相关分析实例
  19. html的px和屏幕什么关系,Html字体大小的设置单位PT与PX区别
  20. 2013年9月中秋云南昆明、丽江、泸沽湖、香格里拉、梅里雪山、虎跳峡之旅

热门文章

  1. 《TCP/IP网络编程》第20章
  2. 全国绿色计算大赛 模拟赛第三阶段
  3. mars3d中时间的转换
  4. R语言自动提取新闻摘要的简单实现
  5. 吴军《数学之美》-读书笔记
  6. 解决:ERROR: Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurat
  7. Kotlin: Classifier ‘Demo1‘ does not have a companion object, and thus must be initialized here
  8. 13个创意爆棚的广告图片
  9. LaTex技巧:用PPT画图,然后导入LaTeX
  10. GB/T 20281-2020实施两周年,美创数据库防火墙的标准实践