2.9 KiB
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 容器;不会连接已有业务数据库,结束后清理测试容器与数据卷。