Files
go-omni/examples/mixedWorkspace/README.md

1.9 KiB
Raw Blame History

API 与通用工程混合工作区

本例只定义生成工程的类型与目录,不包含业务模型、外部服务或特定调度方式。使用 v0.30.0-preview 或更新版本 CLI。

下面从一个空目录创建两个独立 Go module;API 工程来自 API 模板,通用工程默认不监听端口。

go install git.yuntuo.hk/k2safe/go-omni/cmd/go-omni@v0.30.0-preview
mkdir mixed-demo
cd mixed-demo
go-omni api new apps/interface --module example.com/interface
go-omni project new apps/program --module example.com/program

将本目录的 omni.workspace.json 复制到 mixed-demo 根目录,然后执行:

go-omni workspace format    # 格式化 API 契约;通用工程显示 SKIP
go-omni workspace generate
go-omni workspace check

也可以省略两个 kind:CLI 根据各工程的生成清单识别。显式声明与清单冲突会报错;不会根据目录名称猜测类型。

Go 多模块编译由 Go 工具链独立管理:

(cd apps/interface && go mod tidy)
(cd apps/program && go mod tidy)
go work init ./apps/interface ./apps/program
go test ./apps/interface/... ./apps/program/...
go build ./apps/interface/... ./apps/program/...

workspace check 不修改 go.work、go.mod、go.sum 或项目源文件;不启动应用。若显式配置了共享错误目录提供方,仍会按既有约定构建并调用该 Go 导出函数,见 目录导出规则。

手工修改任一生成的 main.go 后,workspace check 会报告对应工程失败并返回非零退出码;两个工程都存在问题时,会汇总报告。workspace generate 先预检所有工程,再进行各自的文件事务;一个预检失败时,其他工程也不写入。不承诺多个模块之间的崩溃事务性。

本例命令与 go.work 编译流程由 cmd/go-omni/TestMixedWorkspaceConsumer 在本地和远程发布验收中执行。