回顾
- 「容器管理系统」 1. 开篇:框架选型和环境搭建
在第一篇开篇文章中,咱们已经选用了Gin
框架和Docker
的版本,这一节咱们需要初始化一些基础配置:
DB
配置- 日志监控
- 配置文件
toml
- 热重载
Air
DB 配置
链接 DB
库咱们使用的是 xorm
的官方包最新版本 v1.3.3
var (
groups map[string]*xorm.Engine
once sync.Once
)
type (
cfg struct {
Host string
Port int
User string
Pass string
Name string
MaxIdleConn int
MaxOpenConn int
}
)
func Init() {
once.Do(func() {
groups = make(map[string]*xorm.Engine)
var cfgs map[string]cfg
if err := viper.UnmarshalKey("db", &cfgs); err != nil {
panic(err)
}
// 记录获取配置日志
logz.Warn(fmt.Sprintln(cfgs))
for instanceRwType, instanceCfg := range cfgs {
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s?charset=%s",
instanceCfg.User,
instanceCfg.Pass,
instanceCfg.Host,
instanceCfg.Port,
instanceCfg.Name,
"utf8mb4")
// 创建 xorm 实例
engine, err := xorm.NewEngine(instanceRwType, dsn)
if err != nil {
panic(err)
}
// 设置最大空闲链接数
if instanceCfg.MaxIdleConn == 0 {
instanceCfg.MaxIdleConn = 5
}
// 设置最大并发链接数
engine.SetMaxIdleConns(instanceCfg.MaxIdleConn)
if instanceCfg.MaxOpenConn == 0 {
instanceCfg.MaxOpenConn = 10
}
engine.SetMaxOpenConns(instanceCfg.MaxOpenConn)
// 是否打印SQL
engine.ShowSQL(viper.GetBool("app.debug"))
engine.SetMapper(names.GonicMapper{})
groups[instanceRwType] = engine
}
})
}
// Grp 返回指定实例组实例
func Grp(name string) *xorm.Engine {
return groups[name]
}
日志监控
log
包使用的是 go-tools
这里使用到了 Gin
的全局中间件,创建一个 Logger
的一个中间件,使用 Gin
的 Use
引入全局中间件.
实现功能:
- 获取
trace id
- 记录时间
- 记录请求类型
- 记录请求参数
- 记录响应码
// 最大内存大小
const maxMemory = 32