代码拉取完成,页面将自动刷新
// 数据库快速连接包
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"
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。