代码拉取完成,页面将自动刷新
package gdb
import (
"fmt"
"gitee.com/ycz-new/ycz/abs"
"github.com/spf13/viper"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"time"
)
var configKey = "datasource"
var _gorm = make(map[string]*gorm.DB)
type loggerConfig struct {
Level int `yaml:"level"`
}
type Option struct {
Username string `yaml:"username"`
Password string `yaml:"password"`
Url string `yaml:"url"`
Extra string `yaml:"extra"`
Logger loggerConfig `yaml:"logger"`
}
type OrmStarter struct {
}
func (m *OrmStarter) GetName() string {
return configKey
}
func (m *OrmStarter) Init(config *viper.Viper, starters abs.StarterList) {
if !config.IsSet(configKey) {
return
}
var opts map[string]Option
err := config.UnmarshalKey(configKey, &opts)
if err != nil {
panic("OrmStarter 配置异常: " + err.Error())
}
for name, opt := range opts {
dsn := fmt.Sprintf("%s:%s@%s?%s",
opt.Username,
opt.Password,
opt.Url,
opt.Extra,
)
starterLogger := starters["logger"].Instance().(*zap.SugaredLogger)
_logger := starterLogger.Named("").WithOptions(zap.AddCaller(), zap.AddCallerSkip(2))
newLogger := &GormNewLogger{
logger: _logger,
level: logger.LogLevel(opt.Logger.Level),
}
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
PrepareStmt: true,
SkipDefaultTransaction: true,
})
if err != nil {
panic("数据库初始化失败:" + err.Error())
}
{
sqlDB, err := db.DB()
if err != nil {
panic("数据库初始化连接数失败")
}
sqlDB.SetMaxIdleConns(20)
sqlDB.SetMaxOpenConns(200)
sqlDB.SetConnMaxLifetime(time.Hour)
}
_gorm[name] = db
}
}
func (m *OrmStarter) Instance(args ...interface{}) interface{} {
return _gorm
}
func Gorm(args ...string) *gorm.DB {
name := "default"
if len(args) > 0 {
name = args[0]
}
g, ok := _gorm[name]
if !ok {
panic("未发现数据库:" + name)
}
return g
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。