goProject/trunk/goutil/mysqlUtil/dbConfig.go

86 lines
2.3 KiB
Go
Raw Permalink Normal View History

2025-01-06 16:01:02 +08:00
package mysqlUtil
import (
"encoding/json"
"fmt"
"strconv"
"strings"
)
// 数据库配置对象
type DBConfig struct {
// 连接字符串
ConnectionString string
// 最大开启连接数量
MaxOpenConns int
// 最大空闲连接数量
MaxIdleConns int
}
func (this *DBConfig) String() string {
bytes, _ := json.Marshal(this)
return string(bytes)
}
// 创建数据库配置对象
// connectionString连接字符串
// maxOpenConns最大开启连接数
// maxIdleConns最大空闲连接数
// 返回值:
// 数据库配置对象
func NewDBConfig(connectionString string, maxOpenConns, maxIdleConns int) *DBConfig {
return &DBConfig{
ConnectionString: connectionString,
MaxOpenConns: maxOpenConns,
MaxIdleConns: maxIdleConns,
}
}
// 创建数据库配置对象
// dbConfigStr数据库配置字符串格式root:moqikaka3306@tcp(10.1.0.10:3306)/gameserver_data?charset=utf8&parseTime=true&loc=Local&timeout=60s||MaxOpenConns=10||MaxIdleConns=5
// 返回值:
// 数据库配置对象
// 错误对象
func NewDBConfig2(dbConfigStr string) (*DBConfig, error) {
connectionString := ""
maxOpenConns := 0
maxIdleConns := 0
// 按照||来进行分割
connSlice := strings.Split(dbConfigStr, "||")
length := len(connSlice)
if length != 1 && length != 3 {
return nil, fmt.Errorf("dbConfigStr:%s格式不正确length:%d", dbConfigStr, length)
}
// 获取连接字符串
connectionString = connSlice[0]
if connectionString == "" {
return nil, fmt.Errorf("dbConfigStr:%s格式不正确length:%d", dbConfigStr, length)
}
var err error
// 如果配置了MaxOpenConns、MaxIdleConns则进行解析
if length == 3 {
// 获取连接池相关
maxOpenConns_string := strings.Replace(connSlice[1], "MaxOpenConns=", "", 1)
maxOpenConns, err = strconv.Atoi(maxOpenConns_string)
if err != nil {
err = fmt.Errorf("MaxOpenConns必须为int型,连接字符串为:%s", connectionString)
return nil, err
}
maxIdleConns_string := strings.Replace(connSlice[2], "MaxIdleConns=", "", 1)
maxIdleConns, err = strconv.Atoi(maxIdleConns_string)
if err != nil {
err = fmt.Errorf("MaxIdleConns必须为int型,连接字符串为:%s", connectionString)
return nil, err
}
}
return NewDBConfig(connectionString, maxOpenConns, maxIdleConns), nil
}