简介
Go语言提供了短声明变量的形式,即使用赋值运算符 := ,它允许对已经赋值的变量再次赋值。但是不同的作用域下,短声明变量的形式存在变量覆盖的坑。
Go之变量覆盖
先看示例:
在运行之前大家可以猜猜输出结果是什么... ... ?
真实的运行结果为:
10
100
1000
100
10
当代码块内部具有与代码块外部相同的变量名时,代码块内部的变量会覆盖代码块外部的变量。
如何检测变量覆盖
赋值运算符 :=存在变量覆盖,会给开发者带来一些不易察觉的bug(坑),所以最好能确保我们写的程序中不存在这一现象(Go为啥提供了这么一个功能呢),为了自动化检测这种情况,我们可以使用golangci-lint静态代码扫描工具。
小结
Go语言提供了短声明变量的形式,即使用赋值运算符 := ,存在变量覆盖的坑,我们可以使用golangci-lint静态代码扫描工具检测。