61 lines
1.9 KiB
Markdown
61 lines
1.9 KiB
Markdown
# cmd 包参考
|
||
|
||
本文档覆盖 `cmd/billing-service/main.go`。该目录只有一个进程入口函数,用于装配配置、数据库、服务层和 HTTP 层。
|
||
|
||
## 文件定位
|
||
|
||
- 路径:`cmd/billing-service/main.go`
|
||
- 对外职责:启动 `billing-service` 进程
|
||
- 依赖方向:`config` -> `exporter` -> `repository` -> `service` -> `httpapi`
|
||
|
||
## 函数
|
||
|
||
### `main`
|
||
|
||
- 签名:`func main()`
|
||
- 参数:无
|
||
- 返回:无
|
||
- 职责:
|
||
- 读取运行配置
|
||
- 打开 PostgreSQL 连接
|
||
- 构造 `service.Service`
|
||
- 启动后台采集循环
|
||
- 启动 HTTP 服务
|
||
- 监听退出信号并触发优雅关闭
|
||
- 调用位置:Go 进程入口,由运行时直接调用
|
||
- 主要副作用:
|
||
- 读取环境变量
|
||
- 建立数据库连接
|
||
- 启动 goroutine
|
||
- 监听网络地址
|
||
- 向日志输出启动信息
|
||
- 错误/边界条件:
|
||
- `config.Load()` 返回错误时直接 `log.Fatal`
|
||
- `sql.Open` 返回错误时直接 `log.Fatal`
|
||
- `ListenAndServe()` 返回非 `http.ErrServerClosed` 时直接 `log.Fatal`
|
||
|
||
### 启动流程拆解
|
||
|
||
| 步骤 | 代码调用 | 目的 |
|
||
| --- | --- | --- |
|
||
| 1 | `config.Load()` | 组装运行配置与默认值 |
|
||
| 2 | `sql.Open("pgx", cfg.DatabaseURL)` | 建立 PostgreSQL 驱动连接 |
|
||
| 3 | `signal.NotifyContext(...)` | 统一管理退出信号 |
|
||
| 4 | `service.New(...)` | 装配业务服务 |
|
||
| 5 | `svc.Start(ctx)` | 启动后台定时采集循环 |
|
||
| 6 | `httpapi.New(svc).Routes()` | 注册 HTTP 路由 |
|
||
| 7 | `server.ListenAndServe()` | 启动 HTTP 服务器 |
|
||
| 8 | `server.Shutdown(...)` | 在信号到达后优雅退出 |
|
||
|
||
### 依赖装配结果
|
||
|
||
`main` 中构造出的核心依赖如下:
|
||
|
||
- 配置对象:`config.Config`
|
||
- exporter 客户端:`*exporter.Client`
|
||
- 持久化实现:`*repository.Postgres`
|
||
- 服务层:`*service.Service`
|
||
- HTTP handler:`*httpapi.Handler`
|
||
|
||
这意味着 `main` 自身不承载业务逻辑,只负责装配与生命周期管理。
|