plugins/languages/golang/skills/lint/SKILL.md
Go 静态分析规范——golangci-lint v2 配置(version 2 schema、linters.default、formatters 段、exclusions 预设、depguard 拦截过时包)、必启 linter 集合、与项目规范冲突的禁用项、govulncheck 漏洞扫描、CI 集成。配置 .golangci.yml、修复 lint 告警、做静态质量审查时触发。
npx skillsauth add lazygophers/ccplugin golang-lintInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
golangci-lint 2026-05 当前 v2.12.2,schema 必须 version: "2"。v1 配置需 golangci-lint migrate 一键转换。
.golangci.yml(v2)version: "2"
linters:
default: standard
enable:
# 核心检查
- errcheck
- govet
- ineffassign
- staticcheck
- unused
# 风格 & 复杂度
- cyclop
- goconst
- gocritic
- whitespace
# Bug 预防
- bodyclose
- contextcheck
- copyloopvar # Go 1.22+ 循环变量
- errorlint
- nilerr
- rowserrcheck
- sqlclosecheck
- unparam
# 安全
- gosec
# 测试
- testifylint
- thelper
- paralleltest
# 依赖治理
- depguard
disable:
- wrapcheck # 项目禁包装错误
- err113 # 项目用 sentinel + 错误码
- exhaustruct # 项目允许部分字段初始化
settings:
depguard:
rules:
deprecated-stdlib:
deny:
- pkg: "log"
desc: "use log/slog instead"
- pkg: "math/rand"
desc: "use math/rand/v2 instead"
- pkg: "io/ioutil"
desc: "deprecated since Go 1.16, use os/io"
formatters:
enable:
- gofmt
- goimports
run:
timeout: 5m
tests: true
issues:
max-issues-per-linter: 0
max-same-issues: 0
exclusions:
warn-unused: true
presets:
- common-false-positives
- std-error-handling
rules:
- path: _test\.go
linters:
- gosec
- dupl
- path: internal/api/
linters:
- wrapcheck
output:
formats:
text:
print-linter-name: true
print-issued-lines: true
| Linter | 作用 |
| --- | --- |
| errcheck | 未处理 error |
| govet | Go vet 全集 |
| staticcheck | 静态分析 SA 系列 |
| ineffassign | 无效赋值 |
| unused | 未使用代码 |
| Linter | 作用 |
| --- | --- |
| bodyclose | HTTP body 未关闭 |
| contextcheck | context 链断裂 |
| copyloopvar | Go 1.22+ 循环变量陷阱(旧代码兼容) |
| errorlint | error 比较错误 |
| nilerr | nil error 返回非 nil 值 |
| rowserrcheck | sql.Rows 未检 Err |
| sqlclosecheck | sql 资源未关 |
| gosec | 安全漏洞 |
| testifylint | testify 用法 |
| paralleltest | 缺 t.Parallel |
| depguard | 拦截过时/危险包 |
| Linter | 原因 |
| --- | --- |
| wrapcheck | 项目禁 fmt.Errorf("%w") |
| err113 | 项目用错误码而非动态错误 |
| exhaustruct | 项目允许部分字段初始化 |
go install 编译慢且版本不固定,推荐:
curl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b ./bin v2.12.2
golangci-lint run ./...
golangci-lint run --fix # 自动修复(formatter + 部分 linter)
golangci-lint fmt # 仅跑 formatter
golangci-lint run --fast-only # 快速模式(pre-commit)
golangci-lint linters # 查看启用列表
golangci-lint migrate # v1 → v2 配置迁移
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
govulncheck -mode=binary ./bin/app
每次发布前必跑。
//nolint:errcheck // reason: best-effort write
_ = os.WriteFile(path, data, 0644)
_, _ = os.Open(path) //nolint:errcheck
nolint 必须带 // reason:,无理由滥用视为反模式。
- uses: golangci/golangci-lint-action@v7
with:
version: v2.12.2
args: --timeout=5m
- name: govulncheck
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...
| AI 借口 | 实际应验证 |
| --- | --- |
| "go vet 够了" | 配了 golangci-lint v2? |
| "告警可以忽略" | 全部修复或带理由 nolint? |
| "wrapcheck 很有用" | 与项目规范冲突的禁用了? |
| "CI 不跑 lint" | CI 集成 lint + govulncheck? |
| "depguard 麻烦" | 拦截过时包(log/math/rand/ioutil)? |
| "用 v1 也行" | 升级 v2 + version: "2"? |
.golangci.yml 存在version: "2"linters.default: standard + 显式 enabledepguard 拦截 log/math/rand/io/ioutilparalleltest + testifylint 启用nolint 全部带 reasontools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。