plugins/languages/golang/skills/db/SKILL.md
Go 数据库规范——GORM Model 命名 ModelXxx、表名单数、枚举 uint8 + 常量、索引 idx_ 前缀 + deleted_at leading column、禁 time.Time 统一 int64 unix、禁指针/nullable 字段、TEXT/BLOB/JSON 禁 default、AutoMigrate 禁改主键。设计 DB model、写 GORM tag、建索引、做 migration 审查时触发。
npx skillsauth add lazygophers/ccplugin golang-dbInstall 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.
ModelXxx,表名单数,如 user、order,非 users。uint8 + 常量分组,禁裸 magic number。idx_ 前缀(含唯一),复合索引带 deleted_at。time.Time,时间统一 int64 unix 秒。omitempty。default tag,MySQL 不支持。type ModelUser struct {
Id uint64 `gorm:"primaryKey" json:"id"`
Username string `gorm:"type:varchar(64);uniqueIndex:idx_username,where:deleted_at=0" json:"username"`
State uint8 `gorm:"type:tinyint unsigned;default:0" json:"state"`
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at"`
DeletedAt int64 `gorm:"index" json:"deleted_at"`
}
Idtype ModelUser struct {
// ...
State uint8 `gorm:"type:tinyint unsigned;default:0" json:"state"`
}
const (
UserStateNil uint8 = 0
UserStateActive uint8 = 1
UserStateDisabled uint8 = 2
)
// 判断用常量,禁裸数字
if user.State == UserStateActive { ... }
// 唯一索引(带 deleted_at)
Username string `gorm:"uniqueIndex:idx_username,where:deleted_at=0"`
// 复合索引(deleted_at 作为 leading column priority:1)
Username string `gorm:"index:idx_username_deleted,priority:2,where:deleted_at=0"`
DeletedAt int64 `gorm:"index:idx_username_deleted,priority:1"`
// 普通索引
State uint8 `gorm:"index:idx_state"`
规则:
idx_ 前缀命名uniqueIndex 无名deleted_atdeleted_at 作 leading column(priority:1)CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at"`
DeletedAt int64 `gorm:"index" json:"deleted_at"` // 软删,0=未删
禁 time.Time、禁 *time.Time、禁 gorm.Model。统一 int64 unix 秒。
type ModelOrder struct {
Id uint64 `gorm:"primaryKey" json:"id"`
Name string `gorm:"type:varchar(128)" json:"name,omitempty"`
Amount int64 `gorm:"type:bigint" json:"amount,omitempty"`
Settings string `gorm:"type:json" json:"settings,omitempty"`
State uint8 `gorm:"type:tinyint unsigned;default:0" json:"state"`
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at"`
DeletedAt int64 `gorm:"index" json:"deleted_at"`
}
json tag,snake_caseomitemptyomitempty(零值有意义)gorm:"type:xxx" 显式声明列类型| 模式 | 替代 |
| --- | --- |
| time.Time / *time.Time | int64 unix 秒 |
| *string / *int64 指针字段 | 零值表示不传 + omitempty |
| gorm:"default:'xxx'" on TEXT/BLOB/JSON | 移除 default tag |
| 裸 uniqueIndex 无名 | uniqueIndex:idx_xxx |
| 裸数字判断 if state == 1 | 常量 UserStateActive |
| gorm.Model 嵌入 | 显式定义字段 |
DROP + ALTERpreMigrateLegacy 类函数| AI 借口 | 实际应验证 | | --- | --- | | "time.Time 更标准" | 全部 int64 unix? | | "指针区分零值和缺失" | omitempty + 零值=不传? | | "索引名无所谓" | 全 idx_ 前缀? | | "gorm.Model 方便" | 显式定义字段? | | "magic number 看得懂" | 全用常量? | | "TEXT 加 default 更安全" | MySQL 不支持? |
ModelXxxuint8 + 常量idx_ 前缀deleted_atint64defaultgorm.Modeltools
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 全自动修, 断链只报告)。