1.7 KiB
1.7 KiB
递归响应类型
通用节点、树集合和相互引用对象的响应示例。没有数据库、权限或业务服务依赖。
在 go-omni 仓库根目录执行(新建独立临时目录):
go install git.yuntuo.hk/k2safe/go-omni/cmd/go-omni@v0.30.0-preview
example_dir="$(mktemp -d)/recursive"
go-omni api generate --api examples/recursiveResponse/service.api --dir "$example_dir" --module example.com/recursive
# 以下文件仅是本次新生成示例的占位实现,替换为示例自身维护的逻辑。
for name in tree forest optional raw pair; do
printf 'package trees\n' > "$example_dir/internal/logic/trees/$name.go"
done
cp examples/recursiveResponse/operations.go.txt "$example_dir/internal/logic/trees/operations.go"
cd "$example_dir"
go mod tidy
go-omni api generate --check
go test ./...
go run .
按启动日志显示的监听地址访问 /tree、/forest、/optional、/raw、/pair。前三层节点通过 []types.Node 编译和返回;/optional 返回 null,/raw 直接返回节点,/pair 返回相互引用类型的有限实例。docs/openapi.json 中的 DTO_Node 通过 $ref 引用自身,DTO_Branch、DTO_Leaf 互相引用。
嵌套集合遵循普通 Go JSON 规则,示例将叶节点的 Children 初始化为空切片,使其输出 [];框架不会递归改写项目返回数据。业务数据不能包含实际指针环。
框架开发时可在首次生成命令后加 --framework-dir . 使用本地代码。回归同时覆盖本地与已发布远程 CLI、真实 HTTP 响应、生成幂等与只读漂移检查:
# 回到 go-omni 仓库根目录执行
GO_OMNI_SCAFFOLD_INTEGRATION=1 go test -race -count=1 ./cmd/go-omni/apigen -run Recursive