由于作用域及赋值操作 := 会自动创建变量,容易发生变量被覆盖或者赋值不成功。检测方法如下(windows系统)
// gopath/src/go_learn/testtest/test.go
func main() {
x := 1
println(x) // 1
{
println(x) // 1
x := 2
println(x) // 2 // 新的 x 变量的作用域只在代码块内部
}
println(x) // 1
go vet检测
go help vet
go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
#go vet -vettool=$(which shadow)
cd $GOPATH
go build src/golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
cd $GOPATH/bin
go vet -vettool=shadow.exe ../src/go_learn/testtest/test.go
go-nyet
go-nyet
上面相同代码,检测结果: