mcpField
G
go-linting

go-linting

github.com/cxuu测试与质量1861.3k 次安装19 周前更新
代码仓库

关于 go-linting

面向 Go 开发者的代码检查技能,帮助建立一致的静态检查流程。它介绍 golangci-lint 配置、推荐检查器、抑制规则和 CI 用法,并附带配置资源。

主要功能

  1. 01配置脚本与 golangci-lint v2 基线配置
  2. 02用于错误、风格和静态分析的检查器建议
  3. 03配置验证与迭代检查指南
  4. 04带理由的具名 nolint 指令
  5. 05CI 与提交前检查集成模式

适用场景

  1. 01为 Go 仓库配置代码检查
  2. 02选择用于错误处理和缺陷检测的检查器
  3. 03在 CI 或提交前运行一致的代码检查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cxuu/golang-skills --skill go-linting

安装后在 Claude Code 中输入/go-linting确认已加载。

附带文件assets/golangci.ymlscripts/setup-lint.sh

详细介绍

Go 代码检查

核心原则

比任何“权威”的代码检查工具集都更重要的是:在整个代码库中始终如一地进行代码检查。

一致的代码检查有助于发现常见问题,并在不过度规定的前提下,建立较高的代码质量标准。

资源路由

  • scripts/setup-lint.sh - 在生成 .golangci.yml、验证首次代码检查,或生成 JSON 元数据时运行。
  • assets/golangci.yml - 将其用作成熟项目的 v2 golangci-lint 基准配置。

设置步骤

  1. 使用 scripts/setup-lint.sh 创建 .golangci.yml,或复制 assets/golangci.yml
  2. 运行 golangci-lint run ./...
  3. 如果出现错误,按类别逐一修复(先处理格式问题,再处理 vet,最后处理风格问题)
  4. 重新运行,直到检查通过

生成 .golangci.yml 后,运行 golangci-lint config verify --config .golangci.yml 以验证配置架构,然后再依赖代码检查结果。


最低推荐的代码检查工具

这些代码检查工具可以发现最常见的问题,同时维持较高的质量标准:

代码检查工具用途
errcheck确保错误得到处理
goimports格式化代码并管理导入项
revive检查常见风格问题(golint 的现代替代品)
govet分析代码中的常见错误
staticcheck执行各种静态分析检查

注意:revive 是现已弃用的 golint 的现代、更快速的继任者。


代码检查运行器:golangci-lint

使用 golangci-lint 作为代码检查运行器。请参阅 uber-go/guide 提供的示例 .golangci.yml。


配置示例

使用 assets/golangci.yml 作为维护中的示例配置。该配置面向 golangci-lint v2(已于 2026-06-19 使用 2.10.1 验证),将 goimports 置于 formatters 下,并启用核心代码检查工具及常见的生产环境扩展项。

运行
# Install the version this skill's config is verified against
go install github.com/golangci/golangci-lint/v2/cmd/[email protected]

# Run all linters
golangci-lint run

# Run on specific paths
golangci-lint run ./pkg/...

其他推荐的代码检查工具

除了最低配置外,生产项目还可以考虑使用以下工具:

代码检查工具用途启用时机
gosec检测安全漏洞处理用户输入的服务应始终启用
ineffassign检测无效赋值始终启用——可发现无用代码
misspell更正注释和字符串中的常见拼写错误始终启用
gocyclo检查圈复杂度阈值函数复杂度超过约 15 时
exhaustive确保 switch 覆盖所有枚举值使用 iota 枚举时
bodyclose检测未关闭的 HTTP 响应体HTTP 客户端代码应始终启用

Nolint 指令

抑制代码检查问题时,务必说明原因:

//nolint:errcheck // fire-and-forget logging; error is not actionable
_ = logger.Sync()

规则:

  • 使用 //nolint:lintername——绝不要只写 //nolint
  • 将注释放在与问题相同的行上
  • 在 // 后添加说明理由

CI/CD 集成

测试完成后,在 CI 中运行 golangci-lint run ./...。固定 CI 使用的 golangci-lint 版本, 以避免本地和发布时的行为出现偏差。

Pre-commit Hook
#!/bin/sh
# .git/hooks/pre-commit
golangci-lint run --new-from-rev=HEAD~1

使用 --new-from-rev 仅检查更改的代码,以加快反馈循环。


快速参考

任务命令/操作
安装 golangci-lintgo install github.com/golangci/golangci-lint/v2/cmd/[email protected]
运行代码检查工具golangci-lint run
检查指定路径golangci-lint run ./pkg/...
配置文件项目根目录下的 .golangci.yml
CI 集成在流水线中运行 golangci-lint run
Nolint 指令//nolint:name // reason — 绝不要只写 //nolint
CI 集成在 GitHub Actions 中使用 golangci/golangci-lint-action
提交前检查golangci-lint run --new-from-rev=HEAD~1
代码检查工具选择指南
需求……使用
错误处理覆盖检查errcheck
导入格式化goimports
风格一致性revive
Bug 检测govet、staticcheck
以上全部使用配置文件运行 golangci-lint

相关技能

  • 风格基础:解决代码检查工具所强制执行的风格问题(格式化、嵌套、命名)时,请参阅 go-style-core
  • 代码审查:将代码检查工具的输出与手动审查清单结合时,请参阅 go-code-review
  • 错误处理:errcheck 标记未处理的错误,需要决定如何处理时,请参阅 go-error-handling
  • 测试:在 CI 流水线中同时运行代码检查工具和测试时,请参阅 go-testing

评论

支持 Markdown