feat(backend): Go 服务骨架(配置、日志、数据库、中间件、Wire)
- config: Viper YAML 配置 + 环境变量覆盖 - logs: zap 结构化日志 + trace_id 链路追踪 + 敏感信息脱敏 - db: PostgreSQL (GORM) + Redis (go-redis) 连接管理 - middleware: Trace/Logger/CORS/Recovery 四层中间件 - provider: Wire 编译时依赖注入 - main.go: 优雅启动/关闭 HTTP 服务 Made-with: Cursor
This commit is contained in:
46
backend/go-service/app/provider/provider.go
Normal file
46
backend/go-service/app/provider/provider.go
Normal file
@@ -0,0 +1,46 @@
|
||||
// Package provider 提供全局依赖注入配置
|
||||
// 使用 Wire 编译时依赖注入,集中管理所有模块的 Provider Set
|
||||
package provider
|
||||
|
||||
import (
|
||||
"github.com/echochat/backend/config"
|
||||
"github.com/echochat/backend/pkg/db"
|
||||
"github.com/google/wire"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// App 应用根容器,持有所有基础设施组件
|
||||
type App struct {
|
||||
Config *config.Config
|
||||
DB *gorm.DB
|
||||
Redis *redis.Client
|
||||
}
|
||||
|
||||
// NewApp 创建应用实例
|
||||
func NewApp(cfg *config.Config, gormDB *gorm.DB, redisClient *redis.Client) *App {
|
||||
return &App{
|
||||
Config: cfg,
|
||||
DB: gormDB,
|
||||
Redis: redisClient,
|
||||
}
|
||||
}
|
||||
|
||||
// provideDBConfig 从全局 Config 中提取 DatabaseConfig
|
||||
func provideDBConfig(cfg *config.Config) *config.DatabaseConfig {
|
||||
return &cfg.Database
|
||||
}
|
||||
|
||||
// provideRedisConfig 从全局 Config 中提取 RedisConfig
|
||||
func provideRedisConfig(cfg *config.Config) *config.RedisConfig {
|
||||
return &cfg.Redis
|
||||
}
|
||||
|
||||
// InfraSet 基础设施层 Provider Set
|
||||
var InfraSet = wire.NewSet(
|
||||
provideDBConfig,
|
||||
provideRedisConfig,
|
||||
db.NewPostgres,
|
||||
db.NewRedis,
|
||||
NewApp,
|
||||
)
|
||||
17
backend/go-service/app/provider/wire.go
Normal file
17
backend/go-service/app/provider/wire.go
Normal file
@@ -0,0 +1,17 @@
|
||||
//go:build wireinject
|
||||
|
||||
// Package provider 提供 Wire 依赖注入入口
|
||||
package provider
|
||||
|
||||
import (
|
||||
"github.com/echochat/backend/config"
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// InitializeApp 初始化整个应用(Wire 自动生成实现)
|
||||
func InitializeApp(cfg *config.Config) (*App, error) {
|
||||
wire.Build(
|
||||
InfraSet,
|
||||
)
|
||||
return nil, nil
|
||||
}
|
||||
30
backend/go-service/app/provider/wire_gen.go
Normal file
30
backend/go-service/app/provider/wire_gen.go
Normal file
@@ -0,0 +1,30 @@
|
||||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
package provider
|
||||
|
||||
import (
|
||||
"github.com/echochat/backend/config"
|
||||
"github.com/echochat/backend/pkg/db"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
// InitializeApp 初始化整个应用(Wire 自动生成实现)
|
||||
func InitializeApp(cfg *config.Config) (*App, error) {
|
||||
databaseConfig := provideDBConfig(cfg)
|
||||
gormDB, err := db.NewPostgres(databaseConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
redisConfig := provideRedisConfig(cfg)
|
||||
client, err := db.NewRedis(redisConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
app := NewApp(cfg, gormDB, client)
|
||||
return app, nil
|
||||
}
|
||||
Reference in New Issue
Block a user