gometalinter-golang代码质量检查分析工具

BORISHOU 2019-06-26

前言

最近在研究代码质量检测和分析这一个环节,当然代码质量分析是devops中持续集成部分非常重要的一个环节。涉及到团队协作的时候,很多公司会有自己的一套规则,最熟悉的是阿里巴巴的java代码参考手册,专家总结,大家按照规则去写代码。但是对于devops,有了规则远远不够,还需要提高代码检查的自动化程度,以及与其他的环节合作衔接上。
那么如果没有代码质量把控这个环节,那么可能带来以下问题:

  • 抽象不够,大量重复的代码。
  • 变量命名各种风格。驼峰派,下划线派等。
  • if else 嵌套太深。
  • 不写注释,或是注释写的不合格。
  • 函数里代码太长
  • 潜在的bug,这就是各种语言的一些语法上的检查了。

最终导致维护困难。这就是程序员经常所说的前任留下的坑,往往结果就是新的接任者选择重构。其实对单位也是一直财力和人力的浪费。另外,更无法满足devops的快速上线,快速诊断,快速迭代的目标。

SonarQube 介绍

SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码风格问题,缺乏单元测试等问题, 并通过一个web ui展示出来。
gometalinter-golang代码质量检查分析工具
SonarQube在devops领域很容易与各种ci各种集成。不过这是我们以后会谈到的问题。
支持不少主流语言,但是没有golang。所以引入了下面的话题。

golang代码质量检查分析工具

gometalinter 简介

该工具基本上集成了目前市场上所有的检测工具,然后可以并发的帮你静态分析你的代码

deadcode
  dupl
  errcheck
  gas
  goconst
  gocyclo
  goimports
  golint
  gosimple
  gotype
  gotypex
  ineffassign
  interfacer
  lll
  maligned
  megacheck
  misspell
  nakedret
  safesql
  staticcheck
  structcheck
  unconvert
  unparam
  unused
  varcheck
  vet

gometalinter安装

go get github.com/alecthomas/gometalinter
gometalinter --install --update

执行上面的两个命令即可。安装非常简单。

gometalinter 的使用

cd 到go项目下,执行 gometalinter ./...
即检查所有目录的go文件,此时vendor目录下的也会检测
如果是想指定指定目录,执行gometalinter + 文件夹名。

bogon:telegraf gaohj$ gometalinter web
web/status.go:165::warning: Errors unhandled.,LOW,HIGH (gas)
web/status.go:165:10:warning: error return value not checked (w.Write([]byte("welcome telegraf for rc"))) (errcheck)
web/status.go:212:19:warning: w can be io.Writer (interfacer)
web/status.go:205:25:warning: do not pass a nil Context, even if a function permits it; pass context.TODO if you are unsure about which Context to use (SA1012) (megacheck)
web/status.go:205:2:warning: 'if err != nil { return err }; return nil' can be simplified to 'return err' (S1013) (megacheck)

vscode集成gometalinter

vscode 默认使用的是golint,如果想用gometalinter替换golint,直接打开
设置项,
在用户设置里添加"go.lintTool": "gometalinter"即可。
gometalinter-golang代码质量检查分析工具

总结

其实接下来会做:

  • gometalinter与SonarQube的配合,可以参考该sonar-golang项目。
  • SonarQube与CI工具的配合,从而构建devops的整个流程。

相关推荐