最近在研究代码质量检测和分析这一个环节,固然代码质量分析是devops中持续集成部分很是重要的一个环节。涉及到团队协做的时候,不少公司会有本身的一套规则,最熟悉的是阿里巴巴的java代码参考手册,专家总结,你们按照规则去写代码。可是对于devops,有了规则远远不够,还须要提升代码检查的自动化程度,以及与其余的环节合做衔接上。
那么若是没有代码质量把控这个环节,那么可能带来如下问题:java
最终致使维护困难。这就是程序员常常所说的前任留下的坑,每每结果就是新的接任者选择重构。其实对单位也是一直财力和人力的浪费。另外,更没法知足devops的快速上线,快速诊断,快速迭代的目标。git
SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 经过SonarQube咱们能够检测出项目中重复代码, 潜在bug, 代码风格问题,缺少单元测试等问题, 并经过一个web ui展现出来。
SonarQube在devops领域很容易与各类ci各类集成。不过这是咱们之后会谈到的问题。
支持很多主流语言,可是没有golang。因此引入了下面的话题。程序员
该工具基本上集成了目前市场上全部的检测工具,而后能够并发的帮你静态分析你的代码github
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
go get github.com/alecthomas/gometalinter gometalinter --install --update
执行上面的两个命令便可。安装很是简单。golang
cd 到go项目下,执行 gometalinter ./...
即检查全部目录的go文件,此时vendor目录下的也会检测
若是是想指定指定目录,执行gometalinter + 文件夹名。web
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 默认使用的是golint,若是想用gometalinter替换golint,直接打开
设置项,
在用户设置里添加"go.lintTool": "gometalinter"便可。sql
其实接下来会作:并发