1 Star 0 Fork 0

小于的个人工具集/dbgorm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
init.go 1.96 KB
一键复制 编辑 原始数据 按行查看 历史
xiaoyutab 提交于 2024-06-24 11:51 +08:00 . 数据库增强
// 数据库快速连接包
package dbgorm
import (
"fmt"
"strings"
"sync"
"gorm.io/gorm"
)
var (
max_connect = 0 // 最大连接数量,0-不限制
default_config = OptionInfo{
Conf: gorm.Config{},
}
)
// 设置默认连接信息
//
// cnf 默认连接信息
func SetDefault(cnf ...Option) {
for i := 0; i < len(cnf); i++ {
cnf[i](&default_config)
}
}
// 设置缓存池中的最大连接数量
//
// max 最大连接量
func SetMaxConnect(max int) {
max_connect = max
}
var _cache_key_map sync.Map
// 获取缓存下标
//
// def 连接配置项
func cache_key(def *OptionInfo) string {
// 当前缓存长度计算
if max_connect > 0 {
i := 0
_cache.Range(func(key, value any) bool {
i++
return true
})
// 如果缓存长度触碰到了最大连接数,则清空缓存重新进行存储计算
if i >= max_connect {
_cache.Range(func(key, value any) bool {
temp := value.(*OptionInfo)
if db, err := temp.DB.DB.DB(); err == nil {
db.Close()
}
return true
})
_cache = sync.Map{}
}
}
if v, ok := _cache_key_map.Load(def.Alias); ok {
return v.(string)
} else if v, ok := _cache_key_map.Load(def.DSN); ok {
return v.(string)
} else if v, ok := _cache_key_map.Load(fmt.Sprintf("%s:%s/%d", def.Type, def.DSN, def.LogLevel)); ok {
return v.(string)
}
ck := fmt.Sprintf("%s:%s/%d", def.Type, def.DSN, def.LogLevel)
_cache_key_map.Store(def.DSN, ck)
if def.Alias != "" {
_cache_key_map.Store(def.Alias, ck)
}
return ck
}
// 根据DSN智能获取数据库类型
//
// dsn 数据库连接字符串
func getType(dsn string) string {
if strings.Contains(dsn, ".db") || strings.Contains(dsn, ".db3") || strings.Contains(dsn, ".sqlite") || strings.Contains(dsn, ".sqlite3") {
return "sqlite"
} else if strings.Contains(dsn, " user=") || strings.Contains(dsn, "postgres://") {
return "postgres"
} else if strings.Contains(dsn, "sqlserver://") || strings.Contains(dsn, "user id=") {
return "sqlserver"
}
return "mysql"
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/xgotool/dbgorm.git
git@gitee.com:xgotool/dbgorm.git
xgotool
dbgorm
dbgorm
master

搜索帮助