package databaseInit import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "gopkg.in/yaml.v3" "os" "toutoukan/model/config" ) var UserDB *sql.DB func DbInit() { data, err := os.ReadFile("./config.yaml") if err != nil { panic(fmt.Errorf("读取配置文件失败: %w", err)) } // 解析配置 var config config.Config if err := yaml.Unmarshal(data, &config); err != nil { panic(fmt.Errorf("解析YAML失败: %w", err)) } // 构建DSN dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/toutoukan?%s", config.Database.Username, config.Database.Password, config.Database.Host, config.Database.Port, config.Database.Params, ) fmt.Println("DSN:", dsn) UserDB, err = sql.Open("mysql", dsn) if err != nil { panic(fmt.Errorf("数据库连接失败1: %w", err)) } // 验证连接是否可用 if err := UserDB.Ping(); err != nil { panic("数据库连接不可用2") } // 设置连接池参数 UserDB.SetMaxOpenConns(10) // 最大打开连接数 UserDB.SetMaxIdleConns(5) // 最大空闲连接数 UserDB.SetConnMaxLifetime(0) // 连接最大存活时间(0表示不限制) }