是個針對Go語言多個Linters組合而成的Linter,是Linters的大集合。
導入linter在CI流程內,已成為常態,至少會警示你的code可能會遭遇哪些問題,安全性是否有疑慮等問題。
以下著名的公司也有使用golangci-lint
在github查詢也有上萬個收尋結果唷!
golangci-lint會從當前目錄的以下路徑中查找配置文件:
請自行在專案內建立上述其中一個檔案 ex:.golangci.yml檔案
這裡有個官網的.golangci.example.yml 範例給各位參考
macOS
brew install golangci/tap/golangci-lint
brew upgrade golangci/tap/golangci-lint
Docker -> 個人推薦
docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.30.0-alpine \
sh -c "golangci-lint run" -v
Linux and Windows
# binary will be $(go env GOPATH)/bin/golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.30.0
golangci-lint --version
example for drone:
kind: pipeline
type: docker
name: default
steps:
- name: golangci-lint
image: golangci/golangci-lint:v1.31.0-alpine
commands:
- golangci-lint run
當你的code確認沒問題,但Linter掃錯有bug想排除怎麼辦?
golangci-lint有提供 可以排除不使用lint的code方法
var bad_name int //nolint
var bad_name int //nolint:golint,unused
請在上方排除 ex: func上方 and 宣告變數上方
//nolint
func allIssuesInThisFunctionAreExcluded() *string {
// ...
}
//nolint:govet
var (
a int
b int
)
//nolint:unparam
package pkg
排除特定linter,並在後方說明原因,往後review時才會快速掌握排除主因
//nolint:gocyclo // This legacy function is complex but the team too busy to simplify it
func someLegacyFunction() *string {
// ...
}