我过去曾在博客中谈到,在开发软件时,特别是当一个团队负责编写该软件时,拥有具体规则和惯例的重要性。团队越大,问题就越多,对于小项目来说,这不是什么大问题(这与团队成员不多有关),但团队越大,确保每个人都遵守同样的规则就越困难。
但是,为什么首先要麻烦呢?
标准化将是关键词,有一个共识,团队同意做 "相同 "的事情,使遵循和理解新旧代码更容易。如果没有Continuous Integration ,这个过程是很难执行的,Code Reviews ,也是这个过程的重要组成部分,添加执行这些规则和惯例的打结器,可以让工程师在审查代码时专注于代码中的实际变化,即真正重要的审查。
当自动运行这些提示器时,好处是显而易见的。
- 所有的代码(新的和旧的)一直遵循相同的规则,而且
- 更重要的是,机器已经指出了什么是不遵循惯例或规则的,没有 "人 "说什么是不正确的。
这种在代码审查中可能发生的人为摩擦被避免了,避免了吹毛求疵,最终使所有的讨论尽可能保持技术性。
Go中最明显的例子是gofmt ,你可能(或不)喜欢最终的格式,但至少你知道其他人的代码看起来都一样,减少了摩擦。
我知道Go社区已经实现了一些伟大的译码器,涵盖了大多数人的需求,例如gometalinter或golangci-lint,但我无法找到一个真正涵盖每个文件中的代码组织的译码器,基本上在哪里放什么,为什么放。
让我向你介绍。 nit我们的有主见的linter。
什么是nit?
nit 是linter(仍处于早期阶段),它对文件中的代码组织进行挑剔。它遵循一个真正有主见的结构,我们在Meredith的团队同意遵循,这可能或不可能对你有用,但至少我认为与世界分享它是重要的。
版本 v0.1.0已经发布,它包括对imports 部分中的代码结构的支持。注意这是一个个人项目,所以可能需要一段时间才能让它的功能完整。
安装和使用
你可以下载已发布的二进制文件,但通常的Go-way也应该可以。
go install github.com/MarioCarrion/nit/cmd/nit
然后你可以像这样使用它。
nit -pkg github.com/MarioCarrion/nit github.com/MarioCarrion/nit github.com/MarioCarrion/nit/cmd/nit
其中-pkg 表示本地基本软件包,接下来的数值表示要挑剔的软件包。如果这些文件不符合意见的结构,它们的错误就会被打印出来。