# infra **Repository Path**: go_common/infra ## Basic Information - **Project Name**: infra - **Description**: go基础组件库,db、Redis、Config、Gtools、Log - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-18 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Infra ![Go Version](https://img.shields.io/badge/go-%3E%3D1.21-blue) [![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE) 轻量级 Go 基础设施组件库,覆盖配置、日志、MySQL、Redis 及少量基础能力封装。 ## 模块 | 模块 | 说明 | 依赖 | | --- | --- | --- | | `conf` | Viper 多源加载(YAML/JSON/TOML + 环境变量),只负责配置读取、映射与动态 key 访问 | [spf13/viper](https://github.com/spf13/viper) | | `log` | 结构化日志接口,TraceID 注入,JSON/Console 双格式,支持文件滚动输出 | [uber-go/zap](https://github.com/uber-go/zap) | | `mysql` | XORM Engine 封装,连接池配置归一化,SQL 日志桥接,健康检查 | [xorm.io/xorm](https://xorm.io/xorm) | | `redis` | go-redis/v9 封装,超时与连接池默认值归一化,健康检查 | [redis/go-redis](https://github.com/redis/go-redis) v9 | | `aliyun` | 阿里云号码认证与验证码封装 | — | ## 快速开始 ```bash go get gitee.com/go_common/infra ``` ```go 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](./LICENSE)