Go代码检修工具集
Go代码检修工具集
gofmt
Go安装程序中自带了gofmt
工具,可以使用它来格式化代码,保持一致的代码风格:
$ find . -name "*.go" -not -path "./vendor/*" -not -path ".git/*" | xargs gofmt -s -d
gocyclo
gocyclo 用来检查函数的复杂度。
安装:
$ go get -u github.com/fzipp/gocyclo
使用:
$ gocyclo -over 12 $(ls -d */ | grep -v vendor)
上面的命令列出了所有复杂度大于12的函数。你还可以提出最复杂的几个:
$ gocyclo -top 10 $(ls -d */ | grep -v vendor)
interfacer
interfacer 是一个有趣的工具,依照作者所说:
这个工具提供接口类型的建议,换句话说,它会对可以本没有必要定义成具体的类型的代码提出警告
安装:
$ go get -u github.com/mvdan/interfacer/cmd/interfacer
使用:
$ interfacer $(glide nv)
译者按:看官方的例子就明白这个工具的作用了:
func ProcessInput(f *os.File) error {
b, err := ioutil.ReadAll(f)
if err != nil {
return err
}
return processBytes(b)
}
$ interfacer $(go list ./... | grep -v /vendor/)
foo.go:10:19: f can be io.Reader
deadcode
deadcode会告诉你哪些代码片段根本没用。
安装:
$ go get -u github.com/tsenart/deadcode
使用:
$ find . -type d -not -path "./vendor/*" | xargs deadcode
gotype
gotype会对go文件和包进行语义(semantic)和句法(syntactic)的分析,这是google提供的一个工具。
安装:
$ go get -u golang.org/x/tools/cmd/gotype
使用:
$ find . -name "*.go" -not -path "./vendor/*" -not -path ".git/*" -print0 | xargs -0 gotype -a
misspell
misspell用来拼写检查,对国内英语不太熟练的同学很有帮助。
安装:
$ go get -u github.com/client9/misspell
使用:
$ find . -type f -not -path "./vendor/*" -print0 | xargs -0 misspell
staticcheck
staticcheck是一个超牛的工具,提供了巨多的静态检查,就像 C#生态圈的 ReSharper 一样。
安装:
$ go get -u honnef.co/go/staticcheck/cmd/staticcheck
使用:
$ staticcheck $(glide nv)
gosimple
gosimple 提供信息,帮助你了解哪些代码可以简化。
安装:
$ go get -u honnef.co/go/simple/cmd/gosimple
使用:
$ gosimple $(glide nv)
译者按: 事实上这个工具和上面的staticcheck工具已经合并为同一个项目了:go-tools,这个项目提供了非常好的工具, 还包括 structlayout-optimize
、unused
、rdeps
、keyify
等,值的你去探索。
goconst
goconst 会查找重复的字符串,这些字符串可以抽取成常量。
$ go get -u github.com/jgautheron/goconst/cmd/goconst
使用:
$ goconst ./… | grep -v vendor
以上是作者列出的一些工具, 和我以前的一篇文章中列出的工具有很多重合的: 使用工具检查你的代码, 事实上我在项目中已经使用了文中很多的代码,非常非常的有帮助,希望你在阅读后能有所收获,快将这些工具加入到你的Makefile文件中吧。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)