AI开源模型权重:技术民主化、应用实践与前沿博弈
2026/8/5 12:54:14
数据库连接配置对象
type MysqlConfig struct { Ip string Port int Useer string Password string DBName string MaxOpenConns int MaxIdleConns int } type RedisConfig struct { Addr string Password string DB int MaxTry int }生成 MySQL 数据库连接字符串(DSN)的方法
func (cfg *MysqlConfig) DSN() string { return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=true&loc=UTC", cfg.User, cfg.Password, cfg.Ip, cfg.Port, cfg.DBName) }1.创建dataServer配置对象:
type DataServerConfig struct { RegionName string TcpIp string TcpPort uint16 ExternalIp string // 注册到etcd对外IP,空时回退TcpIp SysHttpAddr string RegistrationCenter []string PlayerDB *common.MysqlConfig Redis *common.RedisConfig ExecutorSize int }2、生成具体的sql.DB对象并创建连接
func (mgr *DBManager) newDBFromCfg(cfg *common.MysqlConfig) (*sql.DB, error) { if cfg == nil { return nil, errors.New("mysql config is nil") } db, err := sql.Open("mysql", cfg.DSN()) if err != nil { return nil, err } db.SetMaxOpenConns(cfg.MaxOpenConns) db.SetMaxIdleConns(cfg.MaxIdleConns) db.SetConnMaxLifetime(time.Hour * 7) // mysql 默认配置为8小时 需要比服务端小一点 if err := db.Ping(); err != nil { return nil, err } return db, nil }3、直接根据表名和SQL语句进行数据交互
tableName := common.GetPlayerRecordTableName(playerId) querySql := "SELECT player_id,player_name,create_time,format_version,version,last_active_time,bin FROM " + tableName + " WHERE player_id=? LIMIT 1" row := mgr.playerDB.QueryRow(querySql, playerId)