代码拉取完成,页面将自动刷新
/**
* @Author: koulei
* @Description:
* @File: db
* @Version: 1.0.0
* @Date: 2021/8/26 17:49
*/
package gf
import (
"errors"
"io/fs"
"os"
"path/filepath"
"strings"
"sync"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"gorm.io/gorm"
"gitee.com/flash520/utils/container"
"gitee.com/flash520/utils/mysql"
)
const (
mysqlClient string = "MysqlClient"
)
var (
mutex sync.Mutex
)
func DB(loglevel string, maxConn ...int) *gorm.DB {
mutex.Lock()
defer func() { mutex.Unlock() }()
c := container.CreateContainersFactory()
r := c.Get(mysqlClient)
if r == nil {
log.Debug("新建数据库对象")
if rds, err := newDB(strings.ToUpper(loglevel), maxConn...); err != nil {
return nil
} else {
c.Set(mysqlClient, rds)
return rds
}
}
log.Debug("缓存获取数据库对象")
rds := r.(*gorm.DB)
return rds
}
func newDB(loglevel string, conn ...int) (*gorm.DB, error) {
var config string
err := filepath.Walk("./", func(path string, info fs.FileInfo, err error) error {
if strings.Contains(path, "config.yml") {
config = path
}
return nil
})
if err != nil {
os.Exit(1)
}
v := viper.New()
v.SetConfigFile(config)
err = v.ReadInConfig()
if err != nil {
panic(err)
}
r := mysql.CreateMysql(
v.GetString("mysql.hosts"),
v.GetString("mysql.username"),
v.GetString("mysql.password"),
v.GetString("mysql.dbname"), loglevel,
conn...).GetConn()
if r == nil {
return nil, errors.New("数据库初始化失败")
}
return r, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。