# API 与通用工程混合工作区 本例只定义生成工程的类型与目录,不包含业务模型、外部服务或特定调度方式。使用 v0.28.1-preview 或更新版本 CLI。 下面从一个空目录创建两个独立 Go module;API 工程来自 API 模板,通用工程默认不监听端口。 ```sh go install git.yuntuo.hk/k2safe/go-omni/cmd/go-omni@v0.28.1-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` 根目录,然后执行: ```sh go-omni workspace format # 格式化 API 契约;通用工程显示 SKIP go-omni workspace generate go-omni workspace check ``` 也可以省略两个 `kind`:CLI 根据各工程的生成清单识别。显式声明与清单冲突会报错;不会根据目录名称猜测类型。 Go 多模块编译由 Go 工具链独立管理: ```sh (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 导出函数,见 [目录导出规则](../../DEVELOPMENT.md#同一份-go-错误目录供多个服务生成)。 手工修改任一生成的 `main.go` 后,workspace check 会报告对应工程失败并返回非零退出码;两个工程都存在问题时,会汇总报告。workspace generate 先预检所有工程,再进行各自的文件事务;一个预检失败时,其他工程也不写入。不承诺多个模块之间的崩溃事务性。 本例命令与 `go.work` 编译流程由 `cmd/go-omni/TestMixedWorkspaceConsumer` 在本地和远程发布验收中执行。