原文: Lint your #golang code like a mad man!, 作者: Arsham Shirvani

我使用下面的工具来改进我的代码,除了 vendor 文件夹。我的操作系统是GNU/Linux,但是稍微修改一下脚本应该也能运行在你的操作系统上。我使用 glide 来处理依赖(vendor),但你也可以使用你的包依赖管理工具来替换 glide nv, 这个命令列出了所有的文件夹,除了 vender (译者按: Go 1.9中可以直接使用 ./... ,它会排除 vendor 文件夹)。有些情况下 glide nv 不适合,所以我使用了它的老式风格。

注意我使用 $ 作为shell的提示符。

gofmt

Go安装程序中自带了 gofmt 工具,可以使用它来格式化代码,保持一致的代码风格:

1
$ find . -name "*.go" -not -path "./vendor/*" -not -path ".git/*" | xargs gofmt -s -d

gocyclo

gocyclo 用来检查函数的复杂度。

安装:

1
$ go get -u github.com/fzipp/gocyclo

使用:

1
$ gocyclo -over 12 $(ls -d */ | grep -v vendor)

上面的命令列出了所有复杂度大于12的函数。你还可以提出最复杂的几个:

1
$ gocyclo -top 10 $(ls -d */ | grep -v vendor)

deadcode

deadcode 会告诉你哪些代码片段根本没用。

安装:

1
$ go get -u github.com/tsenart/deadcode

使用:

1
$ find . -type d -not -path "./vendor/*" | xargs deadcode

gotype

gotype 会对go文件和包进行语义(semantic)和句法(syntactic)的分析,这是google提供的一个工具。

安装:

1
$ go get -u golang.org/x/tools/cmd/gotype

使用:

1
$ find . -name "*.go" -not -path "./vendor/*" -not -path ".git/*" -print0 | xargs -0 gotype -a

misspell

misspell 用来拼写检查,对国内英语不太熟练的同学很有帮助。

安装:

1
$ go get -u github.com/client9/misspell/cmd/misspell

使用:

1
$ find . -type f -not -path "./vendor/*" -print0 | xargs -0 misspell

staticcheck

staticcheck 是一个超牛的工具,提供了巨多的静态检查,就像 C#生态圈的 ReSharper 一样。

安装:

1
$ go get -u honnef.co/go/staticcheck/cmd/staticcheck

使用:

1
$ staticcheck $(glide nv)

译者按:staticcheck 工具已经合并到了项目:go-tools ,这个项目提供了非常好的工具, 还包括 structlayout-optimizeunusedrdepskeyify等,值的你去探索。

goconst

goconst 会查找重复的字符串,这些字符串可以抽取成常量。

1
$ go get -u github.com/jgautheron/goconst/cmd/goconst

使用:

1
$ goconst ./… | grep -v vendor

以上是作者列出的一些工具, 和我以前的一篇文章中列出的工具有很多重合的: 使用工具检查你的代码, 事实上我在项目中已经使用了文中很多的代码,非常非常的有帮助,希望你在阅读后能有所收获,快将这些工具加入到你的Makefile文件中吧。

References