plugins/languages/golang/skills/naming/SKILL.md
Go 命名规范——Id/Uid 字段(非 ID)、IsActive/HasMFA 布尔前缀、CreatedAt 时间字段、接收者统一用 p、包名全小写无下划线、泛型类型参数描述性命名、集合字段 xxx_list 禁 xxxs 复数、Enum 0 值 XxxNil 禁 Unknown、禁 Status 统一 State、Set/Update 语义区分。定义结构体字段、函数、变量、包、接收者名、泛型、枚举时触发。
npx skillsauth add lazygophers/ccplugin golang-namingInstall 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.
PascalCase,如 User、UserLogin、GetUserById(不是 ID)camelCase,如 user、getUserByIdPascalCase,如 DefaultTimeout、MaxRetriesuser、order、paymentuser.go、user_test.gop,如 (p *User)、(p *Order)i、idx、itemx/y/z/tmptype User struct {
Id uint64 // 主键
Uid uint64 // 用户唯一标识
FriendUid uint64 // 关联用户 ID
UUID string // 仅当确实是 UUID(大写)
}
不写 ID/UserID/UID,统一 Id/Uid/Xxxid → XxxId。
type Model struct {
Id uint64
CreatedAt int64
UpdatedAt int64
DeletedAt int64 // 软删
}
type Friend struct {
Id uint64
State int32
}
const (
FriendStateNil = 0
FriendStatePending = 1
FriendStateActive = 2
FriendStateBlocked = 3
)
禁 Status:字段、常量、列名、变量名一律用 State,不用 Status。
const (
UserStateNil uint8 = 0 // 零值用 XxxNil
UserStateActive uint8 = 1
)
禁 Unknown/None/Unspecified 作零值,统一 XxxNil。
type User struct {
IsActive bool
HasMFA bool
IsAdmin bool
CanEdit bool
}
前缀必须是 Is/Has/Can/Should。
func UserLogin(req *UserLoginReq) (*UserLoginRsp, error)
func GetUserById(req *GetUserByIdReq) (*GetUserByIdRsp, error)
func AddUser(req *AddUserReq) error
func UpdateUser(req *UpdateUserReq) error
func DelUser(req *DelUserReq) error
func ListUser(req *ListUserReq) (*ListUserRsp, error)
| 前缀 | 用途 |
| --- | --- |
| GetXxxById | 取单条 |
| ListXxx | 取列表 |
| CountXxx | 计数 |
| CheckXxxExists | 存在性 |
| IsXxx | 布尔判断 |
func (p *User) Login(password string) error
func (p *Order) Calculate() int64
func (p *Friend) IsActive() bool
不用 self/this/u/o,统一 p。
type Rsp struct {
UserList []*User `json:"user_list"` // ✅
OrderList []*Order `json:"order_list"` // ✅
}
集合字段统一 xxx_list 后缀,禁 users/orders/images/files 等复数形式。
| 前缀 | 语义 | 场景 |
| --- | --- | --- |
| SetXxx | 覆盖整个 model | 整体替换 |
| UpdateXxx | 改部分字段 | 单字段/多字段更新 |
单字段改名必须 Update<Model><Field>,不能 Set<Model>。
// 描述性命名
func Map[T any, R any](items []T, fn func(T) R) []R
func Filter[T any](items []T, fn func(T) bool) []T
// 约束接口
type Ordered interface {
~int | ~float64 | ~string
}
// Go 1.26 自引用
type Node[T Node[T]] interface {
Children() []T
}
| AI 借口 | 实际应验证 | | --- | --- | | "ID 全大写更规范" | 用 Id 不是 ID? | | "self/this 更直观" | 接收者统一 p? | | "变量名越长越清晰" | 避免冗长? | | "GetByID 是 Go 官方写法" | 项目用 GetUserById 风格? | | "T 就够了" | 泛型参数描述性? | | "pkg_name 更清晰" | 包名全小写无下划线? | | "Status 更通用" | 禁 Status,统一 State? | | "Unknown 表示零值" | 零值用 XxxNil? | | "users 复数更自然" | 集合用 xxx_list? |
pId/UidCreatedAt/UpdatedAtState(禁 Status)XxxNil(禁 Unknown)Is/Has/Can 前缀xxx_list 后缀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 全自动修, 断链只报告)。