40 lines
1.9 KiB
Markdown
40 lines
1.9 KiB
Markdown
# API 与通用工程混合工作区
|
||
|
||
本例只定义生成工程的类型与目录,不包含业务模型、外部服务或特定调度方式。使用 v0.28.2-preview 或更新版本 CLI。
|
||
|
||
下面从一个空目录创建两个独立 Go module;API 工程来自 API 模板,通用工程默认不监听端口。
|
||
|
||
```sh
|
||
go install git.yuntuo.hk/k2safe/go-omni/cmd/go-omni@v0.28.2-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` 在本地和远程发布验收中执行。
|