golangci-lint简要手册
简介
golanci-lint 集成了多种静态语法插件,有许多 linter,可以同时执行,是golang静态检查的集大成者。
可以官网直接下载二进制,或者用go安装
# Go 1.16+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.44.2
# Go version < 1.16
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint@v1.44.2
注意 需要设置go代理 ,设置环境变量 GOPROXY="https://goproxy.cn"
也使用docker,注意需要设置代理的环境变量,如下
docker run --rm -v $(pwd):/app -w /app -e GOPROXY="https://goproxy.cn" golangci/golangci-lint:latest-alpine golangci-lint run -v
基本用法
golangci-lint 使用配置来运行,可以使用 -c 指定配置文件
如果没有指定配置文件的位置,会引用下面的配置文件。
● .golangci.yml
● .golangci.yaml
● .golangci.toml
● .golangci.json
运行 golangci-lint run 就会对当前文件夹下的文件进行静态检测。
run 其它参数
--fix 自动修复对应的 linter 报告
--disable-all 关闭所有linter
常见配置
golangci-lint配置部分如下:
# Options for analysis running.
run:
# See the dedicated "run" documentation section.
option: value
# output configuration options
output:
# See the dedicated "output" documentation section.
option: value
# All available settings of specific linters.
linters-settings:
# See the dedicated "linters-settings" documentation section.
option: value
linters:
# See the dedicated "linters" documentation section.
option: value
issues:
# See the dedicated "issues" documentation section.
option: value
severity:
# See the dedicated "severity" documentation section.
option: value
分为以下六大部分,按需配置,并不是都需要
- run 运行配置,比如超时,忽略文件等
- output 输出配置,比如格式
- linters-settings 检测器配置,对具体的检测器细化配置
- linters 开启关闭检测器
- issues 检测器输出报告配置,比如忽略某些检测器的输出
- severity 检测器敏感度配置
run 配置
忽略目录
run:
skip-dirs:
- src/external_libs
- autogenerated_by_my_lib
忽略文件
run:
skip-files:
- ".*\\.my\\.go$"
- lib/bad.go
output 配置
配置示例如下:
# output configuration options
output:
# Default: colored-line-number
format: json
# Print lines of code with issue.
# Default: true
print-issued-lines: false
# Print linter name in the end of issue text.
# Default: true
print-linter-name: false
# Make issues output unique by line.
# Default: true
uniq-by-line: false
# Add a prefix to the output file references.
# Default is no prefix.
path-prefix: ""
# Sort results by: filepath, line and column.
sort-results: false
linters-settings 配置
可以对每一个 linter 进行微调,具体每个 linter 配置见官网,点击 linter 右侧的齿轮⚙图标。
比如 stylecheck 的配置:
linters-settings:
stylecheck:
# Select the Go version to target.
# Default: 1.13
go: "1.15"
# https://staticcheck.io/docs/options#checks
checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"]
# https://staticcheck.io/docs/options#dot_import_whitelist
dot-import-whitelist:
- fmt
# https://staticcheck.io/docs/options#initialisms
initialisms: ["ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS"]
# https://staticcheck.io/docs/options#http_status_code_whitelist
http-status-code-whitelist: ["200", "400", "404", "500"]
linters 配置
开启某些 linter 如下:
linters:
disable-all: true #关闭所有
enable: # 开启下列linter
- megacheck
- govet
当然也可以反过来开启所有,关闭某些linter,但是开启所有不建议。各个 linter 得详细配置和默认开启得 linter 详见官网
linters:
enable-all: true
disable:
- maligned
- prealloc
其它设置
preset 缩小按类别执行得 linter,每个 linter 都有预设集,下面得示例将执行带有“bugs”和“unused”预设的 linter。
fast 启用快速执行
linters:
presets:
- bugs
- unused
fast: false
issue 配置
忽略 排除包含字符得报告
issues:
exclude:
- abcdef
忽略规则 排除符合规则得报告
issues:
exclude-rules:
# Exclude some linters from running on tests files.
- path: _test\.go
linters:
- gocyclo
- errcheck
- dupl
- gosec
# Exclude known linters from partially hard-vendored code,
# which is impossible to exclude via "nolint" comments.
- path: internal/hmac/
text: "weak cryptographic primitive"
linters:
- gosec
# Exclude some staticcheck messages
- linters:
- staticcheck
text: "SA9003:"
# Exclude lll issues for long lines with go:generate
- linters:
- lll
source: "^//go:generate "
另外可以在代码中使用 //nolint 注释,让 linter 忽略
var bad_name int //nolint
指定某个 linter 忽略,详见官网
var bad_name int //nolint:golint,unused
severity 配置
对报告敏感度进行调节,示例如下:
severity:
# Default value is an empty string.
default-severity: error
case-sensitive: true
# Default: []
rules:
- linters:
- dupl
severity: info
可以把默认级别设置为 info ,这样 info 级别的报告,对应于 sonarqube 的代码异味
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。