golangci-lint 基本介绍
golangci-lint 是一个 Go linters 聚合器。
特征
⚡ 非常快:并行运行 linter,重用 Go 构建缓存并缓存分析结果。
⚙️ 基于 Yaml 的配置。
🖥 与 VS Code、Sublime Text、GoLand、GNU Emacs、Vim、Atom、GitHub Actions 的集成。
🥇 包含 48 个linters,无需安装。
📈 由于调整了默认设置,误报的最小数量。
🔥带有颜色、源代码行和标记标识符的漂亮输出。
golangci-lint 各配置项介绍
名字 | 描述 | 预设 |
---|---|---|
deadcode | 找到未使用的代码 | 没用过 |
errcheck | errcheck是用于在Go程序中检查未选中错误的程序。在某些情况下,这些未选中的错误可能是关键错误 | 错误 |
gosimple | Linter for Go 源代码,专门用于简化代码 | 样式 |
govet | Vet 检查 Go 源代码并报告可疑结构,例如参数与格式字符串不一致的 Printf 调用 | 错误 |
ineffassign | 检测何时不使用对现有变量的赋值 | 没用过 |
staticheck | 查找未使用的结构字段 | 没用过 |
typecheck | 就像 Go 编译器的前端一样,解析和类型检查 Go 代码 | 错误 |
unused | 检查未使用常量,变量,函数和类型的Go代码 | 没用过 |
varcheck | 查找未使用的全局变量和常量 | 没用过 |
asciicheck | 简单的 linter 检查您的代码是否不包含非 ASCII 标识符 | 错误、样式 |
bodyclose | 检查 HTTP 响应体是否成功关闭 | 性能、错误 |
cyclop | 检查函数和包的圈复杂度 | 复杂性 |
depguard | Go linter 检查包导入是否在可接受的包列表中 | 样式、导入、模块 |
dogsled | 检查具有太多空白标识符的分配(例如 x, , , _, := f()) | 样式 |
dupl | 代码克隆检测工具 | 样式 |
durationcheck | 检查两个持续时间相乘 | 错误 |
errorlint | errorlint 是一个 linter,可用于查找会导致 Go 1.13 中引入的错误包装方案出现问题的代码。 | 错误 |
exhaustive | 检查枚举 switch 语句的详尽程度 | 错误、样式 |
exhaustivestruct | 检查所有结构的字段是否已初始化 | 样式、测试 |
exportloopref | 检查指向封闭循环变量的指针 | 错误 |
forbidigo | 禁止标识符 | 样式 |
forcetypeassert | 查找强制类型断言 | 错误、样式 |
funlen | 用于检测长功能的工具 | 复杂性 |
gci | gci 控制 golang 包导入顺序并使其始终具有确定性;检查是否存在全局变量;该分析器检查任何发现的全局变量和错误。 | 格式、导入 |
gochecknoglobals | 全局变量是在包作用域中声明并且可以读取的变量,并由包内的任何函数写入。 全局变量可能导致难以跟踪的副作用。 一个函数中的代码可能改变变量状态,而另一个不相关的代码块可能是受其影响。 | 样式 |
gocognit | 检查 Go 代码中是否不存在 init 函数 | 样式 |
asciicheck | 计算和检查功能的认知复杂性 | 复杂性 |
goconst | 查找可以被常量替换的重复字符串 | 样式 |
gocritic | 提供许多诊断程序来检查错误、性能和样式问题。无需通过动态规则重新编译即可扩展。动态规则是使用 AST 模式、过滤器、报告消息和可选建议以声明方式编写的。 | 样式、性能 |
gocyclo | 计算并检查功能的循环复杂性 | 样式 |
godot | 检查评论是否在一段时间内结束 | 样式、评论 |
godox | 用于检测FIXME,TODO和其他注释关键词的工具 | 样式、评论 |
goerr113 | Golang Linter检查错误处理表达式 | 样式、错误 |
gofmt | GOFMT检查代码是否是GOFMT-ed。默认情况下,此工具将使用-s选项运行以检查代码简化 | 格式 |
gofumpt | gofumpt检查代码是否是gofumpt-ed | 格式 |
goheader | Checks是文件标题与模式匹配 | 样式 |
goimports | Goimports 完成了 gofmt 所做的一切。 此外,它还检查未使用的导入 | 格式、引入 |
golint ⚠ | linter 的存储库已由所有者存档。 被revive取代。 | 样式 |
gomnd | 检测幻数的分析器。 | 样式 |
gomoddirectives | 管理 go.mod 中“replace”、“retract”和“excludes”指令的使用。 | 样式、模块 |
gomodguard | 允许和阻止list linter 用于直接 Go 模块依赖项。 这与 depguard 不同,depguard 有不同的块类型,例如版本约束和模块推荐。 | 样式、引入、模块 |
goprintffuncname | 检查打印类函数是否以结尾命名为f | 样式 |
gosec | 检查安全问题的源代码 | 错误 |
ifshort | 尽可能检查您的代码是否对 if 语句使用了简短的语法 | 样式 |
importas | 强制使用一致的导入别名 | 样式 |
interfacer ⚠ | LINTER的存储库已被所有者存档 | 样式 |
lll | 报告排长队 | 样式 |
makezero | 使用非零初始长度查找切片声明 | 样式、错误 |
maligned ⚠ | linter 的存储库已由所有者存档。 替换为 govet ‘fieldalignment’。 | 性能 |
misspell | 在评论中查找常见拼写错误的英语单词 | 样式、评论 |
nakedret | 在大于指定函数长度的函数中查找裸返回 | 样式 |
nestif | 报告深度嵌套的 if 语句 | 复杂性 |
nilerr | 找到即使检查错误不是nil,也可以找到返回nil的代码。 | 错误 |
nlreturn | nlreturn在返回和分支机构语句之前检查新行以增加代码清晰度 | 样式 |
noctx | noctx发现没有context.context的发送HTTP请求 | 性能、错误 |
nolintlint | 报告不良或不足的Nolint指令 | 样式 |
paralleltest | paralleltest 在你的 Go 测试中检测到 t.Parallel() 方法的缺失使用 | 样式、测试 |
prealloc | 查找可能预先分配的切片声明 | 性能 |
predeclared | 找到隐藏 Go 预先声明的标识符之一的代码 | 样式 |
promlinter | 通过 promlint 检查 Prometheus 指标命名 | 样式 |
revive | 用于 Go 的快速、可配置、可扩展、灵活且美观的 linter。 直接替换 golint。 | 样式 |
rowserrcheck | 检查是否已成功检查行的错误 | 错误、SQL |
scopelint ⚠ | 所有者已弃用了Linter的存储库。由exportloopref替换。 | 错误 |
sqlclosecheck | 检查sql.rows和sql.stmt是否已关闭。 | 错误、SQL |
stylecheck | STYLECHECK是GOLINT的替代品 | 样式 |
tagliatelle | 检查struct标签。 | 样式 |
testpackage | LINTE让您使用单独的_test包 | 样式、测试 |
thelper | T Helper检测Golang测试助手没有T.helper()单元格,并检查测试助手的一致性 | 样式 |
tparallel | parallel 检测 Go 测试代码中 t.Parallel() 方法的不当使用 | 样式、测试 |
unconvert | 删除不必要的类型转换 | 样式 |
unparam | 报告未使用的功能参数 | 未使用 |
wastedassign | WastedAssign找到浪费的分配声明。 | 样式 |
whitespace | 检测前导和尾随空格的工具 | 样式 |
wrapcheck | 检查从外部包返回的错误是否已包装 | 样式、错误 |
wsl | 强制您使用空行 | 样式 |
例子:
1 | "--skip-dirs=vendor", |