Files
ProjectAGiPrompt/1-Golang-Dev/3-go-writer-refresh.md
2026-07-01 16:31:30 +08:00

5.7 KiB
Raw Blame History

你是一名精通go语言开发的顶级专家精通各种设计模式精通熟练的开发代码规范喜欢写注释 喜欢打印日志你需要从工程实际的角度帮我考虑现在的skill developing-go-gin-gorm 存在何种设计缺漏 请梳理

核心缺漏

  1. 与当前工程约定不一致 skill 要求使用 pkg/commoncommon.ResponseSuccess/Error,但当前工程实际用的是 rmdc-common/pkg/wdd_reswdd_log,例如 internal/handler/user_handler.gogo.mod 也明确依赖 rmdc-commongo.mod。如果按 skill 生成新代码,容易直接编译失败。

  2. API 风格前后冲突 主规范强制 POST + RequestBodySKILL.md,但 framework-usage.md 示例又用了 GET/PUT/DELETE/:idframework-usage.md。当前工程路由也是 REST 混合风格:internal/handler/router.go。这里必须明确:是“新模块统一 POST”还是“兼容旧路由只新增接口遵循 POST”。

  3. 示例代码存在污染生成结果的错误 handler-example.go 使用 c.Param("id"),与 POST Body 规范冲突:handler-example.go。同文件还用了 common.CodeBusinesshandler-example.go,但错误码定义里是 CodeBusinessErrorerror-codes.go

  4. 错误处理模型太粗 现在是 Handler 直接判断 gorm.ErrRecordNotFoundSKILL.md。更好的工程模型是DAO 返回底层错误Service 转换为领域错误或 AppErrorHandler 只做统一错误响应映射。否则 Handler 会泄漏 GORM 细节,跨层边界不干净。

  5. 多数据库架构没有纳入 skill 当前项目有 DAOManager,并区分 User、CI、Core 等数据库:internal/dao/dao_manager.go。skill 仍按单 *gorm.DB 模板讲,缺少“多库 DAO 注入、跨库禁止事务、DAOManager 使用规则、模块应该选哪个 DB”的约束。

  6. 事务设计不完整 framework-usage.md 让 Service 直接持有 s.db.Transactionframework-usage.md,但主分层又强调 Service 只编排 DAO。建议补 Unit of Work / TxDAO 模式Service 开事务DAO 方法接收 tx禁止事务里混用非 tx DAO。

  7. 时间规范不落地 skill 强制 TimeUtils.Now()SKILL.md,但当前项目本地工具叫 utils.GetNow()pkg/utils/time_utils.go,并且代码里仍大量 time.Now()。需要明确到底用 rmdc-common 的 TimeUtils还是本项目 pkg/utils,并补迁移规则。

  8. 日志规范没有和实际日志库签名对齐 skill 示例写 log.Info(ctx, "...", map[string]interface{}{...}),但项目实际是 wdd_log.Info("format", args...)auth_handler.go。这会导致生成代码不可编译。还缺少敏感字段脱敏、request_id/user_id 标准字段、外部调用耗时日志规范。

  9. 安全与审计规则太薄 只在 API 设计里一句“写操作需审计”:api-design-spec.md。缺少权限中间件接入、JWT claims 获取、管理员校验、敏感日志脱敏、注册/登录/权限变更审计、限流、CORS、密码/Token 禁止入日志等细则。

  10. 验证闭环不可用 validate-structure.sh 在当前环境直接因 CRLF 换行失败我跑了一下bash 报 command not foundsyntax error near unexpected token do\r。脚本文件也确实是 CRLF。并且脚本只查目录、反向依赖、time.Now(),没查 c.JSON、路由风格、错误码、go testgo vetgofmt

建议补强方向

优先把 skill 分成三种模式:new-modulemodify-existingreview-only。新模块可以强制 POST Body改旧模块必须尊重现有路由和公共库。

然后把所有示例改成当前工程真实包名:wdd_reswdd_log、当前 module path、多 DB DAOManager、现有 middleware。示例必须保证可编译。

最后补一套硬校验:gofmtgo test ./...、禁止 c.JSON、禁止跨层 import、禁止未处理 error、检查 time.Now()、检查 Handler 是否直接 import gorm。这样这个 skill 才会从“开发偏好”变成“工程护栏”。