Files
go-omni/cmd/go-omni/README.md

2.9 KiB
Raw Blame History

go-omni CLI

从远程安装,生成一个带 Handler / Service / Repository / Model 分层的服务骨架:

go install git.yuntuo.hk/k2safe/go-omni/cmd/go-omni@v0.6.0-preview
go-omni new --module example.com/billing ./billing
cd billing
go mod tidy
go run ./cmd/server

通过 go install ...@版本 安装的 CLI 从构建信息中读取版本,并把它固定到生成项目的 go.mod。不会使用不存在的 v0.0.0,也不会在普通业务目录中添加本地 replace。

需要选择其他已发布版本时,使用完整版本号:

go-omni new --framework-version v0.6.0-preview --module example.com/billing ./billing

--framework-version 禁用自动本地替换;main、latest 等浮动引用不接受为固定版本。 源码构建的 CLI 使用代码中声明的目标发布版本;该版本未发布时请显式选择已发布版本,或用 --framework-dir 验证本地源码。

在 GoOmni 源码目录执行时,命令会自动在生成项目的 go.mod 中加入本地 replace git.yuntuo.hk/k2safe/go-omni => ...,便于立即运行和测试。目标目录非空时命令会停止,明确传入 --force 才会覆盖脚手架文件。

也可以在任意目录显式指定源码路径:

go-omni new --framework-dir /path/to/go-omni --module example.com/billing ./billing

默认生成内存存储版本;选择 MySQL 时:

go-omni new --database mysql --module example.com/billing ./billing

MySQL 项目额外包含 schema.sql、MySQL Repository 和可选的数据库集成测试。 先应用建表脚本,再设置 GO_OMNI_DB_DSN 启动。ServiceContext 负责连接池初始化、表结构检查、 就绪探针注册和关闭。两种模式都提供用户 CRUD、分页、输入校验和统一错误响应。

生成服务默认包含 /health/live、/health/ready 和示例 /users CRUD。 退出信号通过 signal.NotifyContext 传入 RunContext,Logger 的关闭函数注册到应用生命周期。

发布验收使用 Python 3 标准库脚本,不需要额外 Python 依赖:

python3 scripts/verifyScaffold.py --version v0.6.0-preview
python3 scripts/verifyDatabase.py --version v0.6.0-preview

脚本在源码目录外安装远程 CLI、生成项目,确认固定版本且没有 replace,再下载依赖、 编译、请求接口,并对真实二进制分别发送 SIGINT 和 SIGTERM。同时验证框架 Run 的 信号处理和清理回调。每个进程都必须退出码为 0、释放监听端口;临时项目和测试进程会被清理。

发布前验证当前源码:

go build -o /tmp/go-omni ./cmd/go-omni
python3 scripts/verifyScaffold.py --cli /tmp/go-omni --framework-dir .
python3 scripts/verifyDatabase.py --cli /tmp/go-omni --framework-dir .

数据库验收需要本地 Docker,使用独立 MySQL 8.4 容器;不会连接已有业务数据库,结束后清理测试容器与数据卷。