plugins/languages/golang/skills/api/SKILL.md
Go HTTP API 规范——响应始终 200 + body code 字段、路由 /api/* 全 POST 单段 <Action><Model>、中间件逐路由注册禁 Group(prefix,mw...)、handler 仅返回 (rsp,error)、认证走 header。设计 HTTP API、写路由/handler/中间件时触发。
npx skillsauth add lazygophers/ccplugin golang-apiInstall 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.
code 字段。<Action><Model>。app.Group(prefix, mw...)。(rsp, error),响应构造在统一 wrap 层。X-Token),禁 URL 参数传 token。type Response struct {
Code int32 `json:"code"`
Msg string `json:"msg,omitempty"`
Data interface{} `json:"data,omitempty"`
Hint string `json:"hint,omitempty"`
}
{"code": 0, "data": {"id": 1, "name": "test"}}
{"code": 40001, "msg": "用户名已存在"}
HTTP status 始终 200。禁用 HTTP status code 表达业务错误(404/403/409 等)。
POST /api/LoginUser → impl.LoginUser
POST /api/GetUserProfile → impl.GetUserProfile
POST /api/ListOrders → impl.ListOrders
POST /api/UpdateUserName → impl.UpdateUserName
POST /api/DelFriend → impl.DelFriend
规则:
/api/* 前缀<动词><名词>/api/user/login、/api/v1/users/:id 等 RESTful 路径// ✅ 逐路由注册
pub := app.Group("/api")
pub.Post("/LoginUser", middleware.OptionalAuth, middleware.Logger, impl.ToHandler(impl.LoginUser))
pub.Post("/GetUserProfile", middleware.Auth, middleware.Logger, impl.ToHandler(impl.GetUserProfile))
// ❌ Group 级中间件(同前缀多 Group 互相污染)
api := app.Group("/api", middleware.Auth, middleware.Logger)
逐路由注册避免同前缀路由的中间件意外作用范围。
func UserLogin(req *UserLoginReq) (*UserLoginRsp, error) {
var rsp UserLoginRsp
user, err := state.User.NewScoop().
Where("username", req.Username).
First()
if err != nil {
log.Errorf("err:%v", err)
return nil, err
}
rsp.Token = generateToken(user.Id)
rsp.User = user
return &rsp, nil
}
func XxxYyy(req *XxxYyyReq) (*XxxYyyRsp, error)var rsp XxxRsp 函数顶声明,逐字段赋值,末尾 return &rspreturn &XxxRsp{Field: val}c.JSON() / c.SendStatus() 直接操作 responsetoken := c.Get("X-Token")
// ❌ /api/GetUser?token=xxx
| 操作 | Request | Response |
| --- | --- | --- |
| 登录 | UserLoginReq | UserLoginRsp |
| 查询单条 | GetUserByIdReq | GetUserByIdRsp |
| 列表 | ListUserReq | ListUserRsp |
| 创建 | AddUserReq | AddUserRsp |
| 更新 | UpdateUserReq | UpdateUserRsp |
| 删除 | DelUserReq | DelUserRsp |
type AddUserReq struct {
Username string `json:"username" validate:"required"`
Email string `json:"email" validate:"required,email"`
Age uint8 `json:"age" validate:"required,gte=0"`
}
validate tag 统一校验,禁手写 if req.X == ""| 模式 | 替代 |
| --- | --- |
| HTTP 404/403/409 表达业务错 | 始终 200 + body code |
| RESTful 路径 /users/:id | POST /api/GetUserById |
| app.Group(prefix, mw...) | 逐路由注册中间件 |
| handler 内 c.JSON() | 统一 wrap 层 |
| URL 参数传 token | Header 传 token |
| 手写 if req.X == "" 校验 | validate tag |
| return &Rsp{Field: val} 字面量 | var rsp; rsp.Field = val; return &rsp |
| Update 零值跳过 | 全字段 unconditional |
| AI 借口 | 实际应验证 | | --- | --- | | "RESTful 更标准" | 项目全 POST 单段? | | "404 更语义化" | 始终 200 + code? | | "Group 中间件方便" | 逐路由注册? | | "handler 直接 c.JSON 简单" | 统一 wrap 层? | | "零值跳过更灵活" | Update 全字段 unconditional? | | "手写校验更精确" | validate tag 统一拦截? |
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 全自动修, 断链只报告)。