最近在研究代碼質量檢測和分析這一個環節,固然代碼質量分析是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
其實接下來會作:併發