86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
|
|
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
|
|||
|
|
}
|