Files
go-omni/performance/errorInheritanceAcceptance.md

40 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# v0.11.1-preview App 错误目录继承验收
## 问题与修复
在 Go 中用 `omni.WithErrors` 注册目录后,v0.11.0 生成路由无条件创建空目录 Encoder。Context 选择了该空目录,编码阶段又按空目录解析原始错误,造成已配置错误变成 500/英文系统提示。
修复让空 `WithErrors` 保持 Encoder 不变,生成器仅为非空路由目录绑定策略。Context 原有的 App fallback 因而能够生效;错误目录与响应格式仍独立选择。兼容旧生成代码中的空包装,非空路由目录保持独立、不与 App 合并。
## 复现与回归
- 修复前,`TestRouteInheritsAppErrorCatalog` 的普通路由通过;生成/RawJSON 路由在 Handler 与提前返回中间件两种入口、固定/模板/未知错误三种情况,共 12 项失败,均输出 500 和英文系统提示。
- 修复后该用例全部通过;包括 HTTP 400/数字 400002/中文提示/data:null,HTTP 200 模板提示,未知错误使用项目配置的中文 INTERNAL_ERROR。
- 独立路由用例验证相同错误标识使用路由自己的 409/业务码/提示,App 独有标识不渗入;路由的 detail 字段保持独立。
- EmptyCatalog 编码用例验证完全透传已解析结果,保留原始 error 时也不会二次查空表;非法空目录配置仍拒绝。
- 实际生成项目的 `.api` 没有任何 errorCatalog/error 定义。生成 Handler 调用手写 Service;普通路由、生成路由和全局中间件返回体完全一致,含模板参数、未知兜底和 data:null。
- 生成消费者还覆盖 RawJSON 成功不包装、@errors none 继承 App、手写原文回执、路由 body limit 及超限中文错误、手写 Service 的重生成保护。
## 本地验证
环境:go1.27.1 darwin/arm64;日期:2026-09-24。
- `GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -race -p=1 -count=1 -timeout=300s ./...` 全部通过。
- `go vet ./...`、`go build ./...`、gofmt、`git diff --check` 通过。
本轮仅本地测试及独立生成消费者,没有修改 eTax/ePay 业务代码,没有访问业务服务器;未重跑外部 Redis/MySQL、Linux soak 或完整业务迁移。
## 远程固定版本验收
`v0.11.1-preview` 标签指向 `a2a07a39ea045a08a99545b40e4de74b55b98422`;发布后从独立、干净的模块缓存安装 CLI,并生成项目执行 race 验收。三个消费者均使用远程固定版本,无本地 replace,校验和一致:
`h1:Hz3snXK074stsQno6KUWf1ngAcQI+QNON/pjH0JbwUk=`
| 验收 | 用时 | 结果 |
| --- | --- | --- |
| [App 错误目录继承](errorInheritanceRemote.json) | 19.41s | 通过;Go 单处注册、普通/生成路由、提前返回中间件、参数提示、未知兜底、独立路由目录及路由请求体限制 |
| [错误模板参数](errorInheritanceParamsRemote.json) | 19.76s | 通过;类型参数、并发隔离、缺参/错参兜底、原因不外泄、HTTP 200 业务失败及 OpenAPI 示例 |
| [业务迁移兼容性](errorInheritanceCompatibilityRemote.json) | 20.16s | 通过;动态 JSON、原始体验签、multipart 清理、下载不包装及手写文件保护 |
各报告记录对应验收脚本与消费者源码的 SHA-256,追加记录时已核对一致。临时项目及缓存已清理;远程模块在本机运行验收,未对业务服务器进行负载测试。报告单独提交至 main,已发布标签保持不可变。