gometalinter-golang代碼質量檢查分析工具

前言

最近在研究代碼質量檢測和分析這一個環節,固然代碼質量分析是devops中持續集成部分很是重要的一個環節。涉及到團隊協做的時候,不少公司會有本身的一套規則,最熟悉的是阿里巴巴的java代碼參考手冊,專家總結,你們按照規則去寫代碼。可是對於devops,有了規則遠遠不夠,還須要提升代碼檢查的自動化程度,以及與其餘的環節合做銜接上。
那麼若是沒有代碼質量把控這個環節,那麼可能帶來如下問題:java

  • 抽象不夠,大量重複的代碼。
  • 變量命名各類風格。駝峯派,下劃線派等。
  • if else 嵌套太深。
  • 不寫註釋,或是註釋寫的不合格。
  • 函數裏代碼太長
  • 潛在的bug,這就是各類語言的一些語法上的檢查了。

最終致使維護困難。這就是程序員常常所說的前任留下的坑,每每結果就是新的接任者選擇重構。其實對單位也是一直財力和人力的浪費。另外,更沒法知足devops的快速上線,快速診斷,快速迭代的目標。git

SonarQube 介紹

SonarQube 是一個開源的代碼分析平臺, 用來持續分析和評測項目源代碼的質量。 經過SonarQube咱們能夠檢測出項目中重複代碼, 潛在bug, 代碼風格問題,缺少單元測試等問題, 並經過一個web ui展現出來。
圖片描述
SonarQube在devops領域很容易與各類ci各類集成。不過這是咱們之後會談到的問題。
支持很多主流語言,可是沒有golang。因此引入了下面的話題。程序員

golang代碼質量檢查分析工具

gometalinter 簡介

該工具基本上集成了目前市場上全部的檢測工具,而後能夠併發的幫你靜態分析你的代碼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

gometalinter安裝

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

執行上面的兩個命令便可。安裝很是簡單。golang

gometalinter 的使用

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集成gometalinter

vscode 默認使用的是golint,若是想用gometalinter替換golint,直接打開
設置項,
在用戶設置裏添加"go.lintTool": "gometalinter"便可。
圖片描述sql

總結

其實接下來會作:併發

  • gometalinter與SonarQube的配合,能夠參考該sonar-golang項目。
  • SonarQube與CI工具的配合,從而構建devops的整個流程。
相關文章
相關標籤/搜索