go list ./... | fgrep -v /vendor) lint: go get golang.org/x/lint/golint go get honnef.co/go/tools/cmd/staticcheck go get github.com/kisielk/errcheck golint $(pkgs) go vet $(pkgs) staticcheck $(pkgs) errcheck $(pkgs) Makefile для запуска 4-х линтеров
list ./... | fgrep -v /vendor) lint: go get golang.org/x/lint/golint go get honnef.co/go/tools/cmd/staticcheck go get github.com/kisielk/errcheck echo $(pkgs) | xargs -P4 golint echo $(pkgs) | xargs -P4 go vet echo $(pkgs) | xargs -P4 staticcheck echo $(pkgs) | xargs -P4 errcheck
type Cache should have comment or be unexported redis.go:13:6: exported type Redis should have comment or be unexported redis.go:17:1: exported function NewRedis should have comment or be unexported redis.go:33:1: exported method Redis.Get should have comment or be unexported redis.go:55:1: exported method Redis.Set should have comment or be unexported
.golangci.yml issues: exclude: - should have comment or be unexported - another pattern Опция `exclude` исключает сообщения по их тексту по регулярке golangci-lint автоматически находит .golangci.yml
//nolint:golint var b_a_d int //nolint:golint,gofmt var v int //nolint //nolint:prealloc func f() { // ... } Можно исключать текущую строку или блок //nolint
go vet main.go:5: missing argument for Sprintf("%s") main.go:6: missing argument for Sprintf("%s") $ go vet |& revgrep origin/master main.go:6: missing argument for Sprintf("%s")
golangci-lint 2. Встройте golangci-lint в CI + IDE + pre-commit 3. Примените --new-from-rev для быстрой интеграции 4. Сделайте линтеры ревьюерами через Reviewdog/CodeClimate.com/GolangCI.com/...