1.9 KiB
1.9 KiB
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.Fatalsql.Open返回错误时直接log.FatalListenAndServe()返回非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 自身不承载业务逻辑,只负责装配与生命周期管理。