plugins/languages/golang/skills/core/SKILL.md
Go 1.26 核心开发规范——强制约定、代码格式、Go 1.21-1.26 新特性(range-over-func、slog、generic aliases、Green Tea GC、new(expr)、自引用泛型)、提交前检查清单。编写 Go 代码、设置项目骨架、做代码评审、回答 "Go 应该怎么写" 时触发。
npx skillsauth add lazygophers/ccplugin golang-coreInstall 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.
适用于 Go 1.26(2026-02 发布),向下兼容 1.21+。
| 场景 | Skill |
| --- | --- |
| 错误处理 | golang-error |
| 工具库选型 | golang-libs |
| 命名 | golang-naming |
| 项目结构 | golang-structure |
| 测试 | golang-testing |
| 并发 | golang-concurrency |
| Lint 配置 | golang-lint |
| 工具链 | golang-tooling |
| 数据库 | golang-db |
| HTTP API | golang-api |
if err != nil { return err }。candy、字符串经 stringx、文件经 osx,禁止手写 for 循环遍历做 Map/Filter。log/slog + 内置函数import "log/slog"
slog.Info("user registered", "username", name, "email", email)
m := min(a, b)
M := max(a, b)
clear(mySlice)
clear(myMap)
for i := range 10 { /* 0..9 */ }
mux.HandleFunc("GET /api/users/{id}", getUser)
mux.HandleFunc("POST /api/users", createUser)
// 1.22+ 循环变量每轮新建,无需再 item := item
for _, item := range items {
go func() { handle(item) }()
}
iter 包import "iter"
import "maps"
import "slices"
for k, v := range maps.All(m) { fmt.Println(k, v) }
func (t *Tree[V]) All() iter.Seq2[string, V] {
return func(yield func(string, V) bool) { /* ... */ }
}
tool 指令 + os.Root + testing.B.Looptype Set[T comparable] = map[T]struct{}
// go.mod 中: tool golang.org/x/tools/cmd/stringer
root, _ := os.OpenRoot("/data")
defer root.Close()
f, _ := root.Open("config.json") // 越界拒绝
func BenchmarkFoo(b *testing.B) {
for b.Loop() { foo() }
}
WaitGroup.Go + testing/synctest GAvar wg sync.WaitGroup
wg.Go(func() { doWork() }) // 自动 Add(1)/Done()
wg.Wait()
synctest.Test(t, func(t *testing.T) {
// bubble 内 time 为假时钟,goroutine 全 durably blocked 后 Wait 返回
})
new(expr) + 自引用泛型 + Green Tea GC 默认 + go fix 现代化p := new(42) // *int = 42
q := new(Point{1,2}) // *Point
type Node[T Node[T]] interface {
Children() []T
}
go fix 重写为现代化工具,配合 //go:fix inline 做 API 迁移GOEXPERIMENT=goroutineleakprofile(goroutine 泄漏剖析)、GOEXPERIMENT=simd(向量 SIMD)package mypkg
import (
// 标准库
"context"
"log/slog"
"os"
// 第三方
"github.com/lazygophers/log"
"github.com/lazygophers/utils/candy"
"gorm.io/gorm"
// 项目内
"github.com/your/project/internal/state"
)
const (...)
var (...)
type Foo struct {...}
type Bar interface {...}
func New() *Foo {...}
.go 文件 ≤500 行,推荐 200-400 行。// Foo 表示...。| 模式 | 替代 |
| --- | --- |
| if err != nil { return err } 单行 | 多行 + log.Errorf("err:%v", err) |
| fmt.Errorf("...: %w", err) | 直接 return err,禁止包装 |
| 手写 for _, x := range xs 做 Map/Filter | candy.Map/candy.Filter |
| os.Stat/手写 os.OpenFile + close 检查存在 | osx.IsFile/osx.IsDir |
| sync/atomic 直接用 | go.uber.org/atomic |
| 业务流程用 panic/recover | log.Errorf + return error;初始化用 log.Fatalf |
| Repository 接口 + 依赖注入 | state 包全局变量 |
gofmt -w . + goimports -w . 已跑go vet ./... 无告警golangci-lint run ./... 通过(见 golang-lint)govulncheck ./... 无 HIGHgo test -race -cover ./... 通过fmt.Errorf 包装if errcandy,字符串走 stringxmin/max、for i := range N、slog、WaitGroup.Go)| AI 借口 | 实际应验证 | | --- | --- | | "单行 if err 更简洁" | 是否所有 error 多行 + 日志? | | "fmt.Errorf 加上下文更清晰" | 是否禁止包装、直接 return? | | "for 循环更直观" | 集合操作是否走 candy? | | "Repository 接口更好测试" | 是否用 state 全局? | | "Go 1.18 泛型够用了" | 是否启用 1.23 iter / 1.26 new(expr) 等? | | "导出函数不用注释" | 所有导出 API 是否有名字开头注释? |
tools
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 全自动修, 断链只报告)。