Infra

轻量级 Go 基础设施组件库,覆盖配置、日志、MySQL、Redis 及少量基础能力封装。
模块
| 模块 |
说明 |
依赖 |
conf |
Viper 多源加载(YAML/JSON/TOML + 环境变量),只负责配置读取、映射与动态 key 访问 |
spf13/viper |
log |
结构化日志接口,TraceID 注入,JSON/Console 双格式,支持文件滚动输出 |
uber-go/zap |
mysql |
XORM Engine 封装,连接池配置归一化,SQL 日志桥接,健康检查 |
xorm.io/xorm |
redis |
go-redis/v9 封装,超时与连接池默认值归一化,健康检查 |
redis/go-redis v9 |
aliyun |
阿里云号码认证与验证码封装 |
— |
快速开始
go get gitee.com/go_common/infra
import (
"context"
"gitee.com/go_common/infra/conf"
"gitee.com/go_common/infra/log"
"gitee.com/go_common/infra/mysql"
"gitee.com/go_common/infra/redis"
)
type AppConfig struct {
Name string `mapstructure:"name"`
Env string `mapstructure:"env"`
Port int `mapstructure:"port"`
}
type Config struct {
App AppConfig `mapstructure:"app"`
Log log.Config `mapstructure:"log"`
MySQL mysql.Config `mapstructure:"mysql"`
Redis redis.Config `mapstructure:"redis"`
}
var cfg Config
acc, err := conf.LoadInto(&cfg, conf.WithFilePath("config.yaml"), conf.WithEnvPrefix("APP"))
if err != nil {
return err
}
logger, err := log.New(cfg.Log)
if err != nil {
return err
}
defer logger.Sync()
ctx := log.ContextWithTraceID(context.Background(), log.NewTraceID())
logger.Ix(ctx, "bootstrap", "service started, app=%s", cfg.App.Name)
db, err := mysql.New(cfg.MySQL, logger)
if err != nil {
return err
}
defer db.Close()
if err := db.Ping(context.Background()); err != nil {
return err
}
rdb, err := redis.New(cfg.Redis)
if err != nil {
return err
}
defer rdb.Close()
if err := rdb.Ping(context.Background()); err != nil {
return err
}
_ = acc.GetString("app.name")
conf.MustLoadInto、log.MustNew 仍然可用,但更推荐在示例和库代码里显式处理错误。
约定
conf 只负责“把配置读进目标结构体”,不再持有 log/mysql/redis 的配置类型,也不再替这些模块定义默认值。
log、mysql、redis 的默认值与归一化逻辑都收敛在各自模块内部,避免默认值在多个包里漂移。
Underlying()、Engine()、Unwrap() 属于高级逃逸口,适合桥接特殊能力;常规业务代码优先依赖本仓库暴露的抽象接口。
迁移提示
conf.Load、conf.MustLoad、conf.LoadWithAccessor 已替换为 conf.LoadInto、conf.MustLoadInto、conf.LoadAccessor。
log.New、mysql.New、redis.New 现在分别接收 log.Config、mysql.Config、redis.Config。
- 阿里云封装导入路径已从
infra/pkg 调整为 infra/aliyun。
aliyun 速查
| 文件 |
函数 |
verify.go |
AliyunGetMobile AliyunVerifyIntelligentCaptcha |
date、slice、string、verify 这组通用方法已经迁到 openapi_youpu/pkg,本仓库现在通过 infra/aliyun 提供阿里云验证码与号码认证能力。
许可证
MIT