Files
go-omni/reports/generationExperienceAcceptance.md

4.4 KiB
Raw Blame History

通用生成体验验收(v0.17.0-preview)

本轮完成公共字段组合、可选结构映射、带依赖的中间件工厂与 Repository 骨架开关。没有添加项目特定金额、授权或数据库规则。

实际生成项目

TestCompositionMappingConsumer 从 .api 生成独立模块,安装项目自己的 Money scalar、业务类型、转换函数、依赖与中间件,然后生成企业/租户/管理三端的请求和响应映射。在生成模块内执行 go test -race ./...、go build .,用真实生成 Handler 处理 HTTP 请求。

验证:

  • 公共字段生成平铺 DTO;字段注释、长度校验、绑定和 OpenAPI 同步;未知组合、同名字段/来源冲突、循环和展开上限均拒绝。
  • 三端正确处理正常输入、缺失、null、零值、非法金额、空金额、数值金额拒绝和完整表单更新。项目示例的精确十进制保留 90071992547409.91,1.005 按项目规则得到 1.01;可空单位金额保持 nil,ID 字符串保持大整数精度。
  • 同名同类型直接赋值;重命名、指针取值、金额默认值和 ID 字符串由显式转换函数控制;Go 值嵌入按明确路径映射。
  • slice/等长 array 的显式逐项映射、nil 与非 nil 空 slice、普通引用赋值、错误链、零结果与 32 个并发调用通过 race 检查。
  • 新增源/目标字段未处理、错误转换签名、指针差异未声明、遗漏企业范围字段处理、无效忽略规则、数组长度不匹配均在写入前失败;Go 文件、模块文件和 manifest 快照不变。未知/循环映射、冲突转换声明、不可访问 internal 包等在类型加载前拒绝。
  • 重复生成字节一致、业务文件保留,--check 只读。macOS /var 别名统一到真实路径,新增 DTO 字段不会被旧 Go 导出数据掩盖。
  • 依赖先初始化,再调用工厂自动注册。工厂失败、返回 nil、panic、依赖初始化失败和监听失败都会正确释放已登记资源,真实错误链保留;正常重复 Close 不重复释放资源。
  • Repository 默认关闭,group 模式补齐骨架,切回 none 保留已有业务实现。旧项目默认保持 handlers 模式;新配置建立后若丢失,明确报错,防止静默切换生成策略。

回归结果

回归记录:全仓库 44 个有测试的包通过 race,发布版本的 go vet、go build 通过。记录包含命令、日志摘要和变更 Go 源码 SHA256。

实际进程验收:根目录 go run/go build、重复生成、生成检查、业务保留、nethttp/native 的 SIGINT/SIGTERM、监听端口释放、下载/原始回调/multipart、错误目录与默认 404/405 通过,耗时 4.99 秒;临时进程和目录均由脚本清理。

现有 examples/managedService 更新生成配置基线后 generate --check 与模块编译测试通过。本轮不涉及 eTax 业务迁移。

远程发布验收

v0.17.0-preview 标签固定在 8b588a24cd653dac77dd68f6777e0db367981f19,已推送 main 与标签。使用空模块缓存从远程安装 CLI;框架校验和为 h1:CH1axmZEcf8sMTHp3dRVAN0DMmkg9nURFd22H9LXASQ=,所有消费者固定同版且没有本地 replace。

远程验收报告:46 项检查通过,耗时 44.56 秒。真实进程验证根目录启动、nethttp/native 信号退出、下载、multipart、原始回调、默认错误响应和共享错误目录;7 组实际生成消费者通过 race,包括公共字段/结构映射/工厂依赖与失败清理/Repository 开关,以及原有参数、错误目录和生命周期行为。参数不兼容或映射遗漏时写入前失败;重新生成保留业务实现,--check 保持只读。

复验命令:

python3 scripts/verifyManagedRelease.py --version v0.17.0-preview --report /tmp/goOmniRemote.json

验收临时目录和服务进程已清理。远程报告以独立提交补充,发布标签不移动。

使用边界

映射是显式启用的 CLI 能力,使用 Go 编译器类型信息,不执行项目初始化或转换函数;运行时只有生成的赋值/调用代码。转换函数包应独立于生成输出包,类型依赖需提前解析。普通指针输入中已经合并的缺失/null 不会被重新推断;普通指针/map/slice 赋值保持 Go 共享引用语义。完整使用与迁移见 生成能力指南。