5.7 KiB
你是一名精通go语言开发的顶级专家,精通各种设计模式,精通熟练的开发代码规范,喜欢写注释 喜欢打印日志;你需要从工程实际的角度,帮我考虑现在的skill developing-go-gin-gorm 存在何种设计缺漏 请梳理
核心缺漏
-
与当前工程约定不一致 skill 要求使用
pkg/common、common.ResponseSuccess/Error,但当前工程实际用的是rmdc-common/pkg/wdd_res、wdd_log,例如 internal/handler/user_handler.go。go.mod也明确依赖rmdc-common:go.mod。如果按 skill 生成新代码,容易直接编译失败。 -
API 风格前后冲突 主规范强制
POST + RequestBody:SKILL.md,但framework-usage.md示例又用了GET/PUT/DELETE和/:id:framework-usage.md。当前工程路由也是 REST 混合风格:internal/handler/router.go。这里必须明确:是“新模块统一 POST”,还是“兼容旧路由,只新增接口遵循 POST”。 -
示例代码存在污染生成结果的错误
handler-example.go使用c.Param("id"),与 POST Body 规范冲突:handler-example.go。同文件还用了common.CodeBusiness:handler-example.go,但错误码定义里是CodeBusinessError:error-codes.go。 -
错误处理模型太粗 现在是 Handler 直接判断
gorm.ErrRecordNotFound:SKILL.md。更好的工程模型是:DAO 返回底层错误,Service 转换为领域错误或AppError,Handler 只做统一错误响应映射。否则 Handler 会泄漏 GORM 细节,跨层边界不干净。 -
多数据库架构没有纳入 skill 当前项目有
DAOManager,并区分 User、CI、Core 等数据库:internal/dao/dao_manager.go。skill 仍按单*gorm.DB模板讲,缺少“多库 DAO 注入、跨库禁止事务、DAOManager 使用规则、模块应该选哪个 DB”的约束。 -
事务设计不完整
framework-usage.md让 Service 直接持有s.db.Transaction:framework-usage.md,但主分层又强调 Service 只编排 DAO。建议补 Unit of Work / TxDAO 模式:Service 开事务,DAO 方法接收 tx,禁止事务里混用非 tx DAO。 -
时间规范不落地 skill 强制
TimeUtils.Now():SKILL.md,但当前项目本地工具叫utils.GetNow():pkg/utils/time_utils.go,并且代码里仍大量time.Now()。需要明确到底用rmdc-common的 TimeUtils,还是本项目pkg/utils,并补迁移规则。 -
日志规范没有和实际日志库签名对齐 skill 示例写
log.Info(ctx, "...", map[string]interface{}{...}),但项目实际是wdd_log.Info("format", args...):auth_handler.go。这会导致生成代码不可编译。还缺少敏感字段脱敏、request_id/user_id 标准字段、外部调用耗时日志规范。 -
安全与审计规则太薄 只在 API 设计里一句“写操作需审计”:api-design-spec.md。缺少权限中间件接入、JWT claims 获取、管理员校验、敏感日志脱敏、注册/登录/权限变更审计、限流、CORS、密码/Token 禁止入日志等细则。
-
验证闭环不可用
validate-structure.sh在当前环境直接因 CRLF 换行失败;我跑了一下,bash 报command not found和syntax error near unexpected token do\r。脚本文件也确实是 CRLF。并且脚本只查目录、反向依赖、time.Now(),没查c.JSON、路由风格、错误码、go test、go vet、gofmt。
建议补强方向
优先把 skill 分成三种模式:new-module、modify-existing、review-only。新模块可以强制 POST Body;改旧模块必须尊重现有路由和公共库。
然后把所有示例改成当前工程真实包名:wdd_res、wdd_log、当前 module path、多 DB DAOManager、现有 middleware。示例必须保证可编译。
最后补一套硬校验:gofmt、go test ./...、禁止 c.JSON、禁止跨层 import、禁止未处理 error、检查 time.Now()、检查 Handler 是否直接 import gorm。这样这个 skill 才会从“开发偏好”变成“工程护栏”。