关于 go-linting
面向 Go 开发者的代码检查技能,帮助建立一致的静态检查流程。它介绍 golangci-lint 配置、推荐检查器、抑制规则和 CI 用法,并附带配置资源。
主要功能
- 01配置脚本与 golangci-lint v2 基线配置
- 02用于错误、风格和静态分析的检查器建议
- 03配置验证与迭代检查指南
- 04带理由的具名 nolint 指令
- 05CI 与提交前检查集成模式
适用场景
- 01为 Go 仓库配置代码检查
- 02选择用于错误处理和缺陷检测的检查器
- 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 基准配置。
设置步骤
- 使用
scripts/setup-lint.sh创建.golangci.yml,或复制assets/golangci.yml - 运行
golangci-lint run ./... - 如果出现错误,按类别逐一修复(先处理格式问题,再处理 vet,最后处理风格问题)
- 重新运行,直到检查通过
生成 .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-lint | go 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