diff --git a/init/databaseInit/databaseInit.go b/init/databaseInit/databaseInit.go new file mode 100644 index 0000000..d58d101 --- /dev/null +++ b/init/databaseInit/databaseInit.go @@ -0,0 +1,52 @@ +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表示不限制) + +}