infra

module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2026 License: MIT

README

Infra

Go Version License

轻量级 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.MustLoadIntolog.MustNew 仍然可用,但更推荐在示例和库代码里显式处理错误。

约定

  • conf 只负责“把配置读进目标结构体”,不再持有 log/mysql/redis 的配置类型,也不再替这些模块定义默认值。
  • logmysqlredis 的默认值与归一化逻辑都收敛在各自模块内部,避免默认值在多个包里漂移。
  • Underlying()Engine()Unwrap() 属于高级逃逸口,适合桥接特殊能力;常规业务代码优先依赖本仓库暴露的抽象接口。

迁移提示

  • conf.Loadconf.MustLoadconf.LoadWithAccessor 已替换为 conf.LoadIntoconf.MustLoadIntoconf.LoadAccessor
  • log.Newmysql.Newredis.New 现在分别接收 log.Configmysql.Configredis.Config
  • 阿里云封装导入路径已从 infra/pkg 调整为 infra/aliyun

aliyun 速查

文件 函数
verify.go AliyunGetMobile AliyunVerifyIntelligentCaptcha

dateslicestringverify 这组通用方法已经迁到 openapi_youpu/pkg,本仓库现在通过 infra/aliyun 提供阿里云验证码与号码认证能力。

许可证

MIT

Directories

Path Synopsis
Package conf 提供基于 Viper 的配置加载能力。
Package conf 提供基于 Viper 的配置加载能力。
Package log 提供基于 Zap 的结构化日志能力。
Package log 提供基于 Zap 的结构化日志能力。
Package mysql 提供基于 XORM 的 MySQL 客户端封装。
Package mysql 提供基于 XORM 的 MySQL 客户端封装。
Package redis 提供基于 go-redis/v9 的 Redis 客户端封装。
Package redis 提供基于 go-redis/v9 的 Redis 客户端封装。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL