From 06ec433b4e106e585bfe8016a571f1d18875295d Mon Sep 17 00:00:00 2001 From: ByteZhou-2018 <1843607154@qq.com> Date: Tue, 18 Mar 2025 21:35:10 +0800 Subject: [PATCH 1/2] Optimize GORM database initialization by extracting duplicate logic --- server/initialize/gorm_mysql.go | 30 +++++++++++------------------- server/initialize/gorm_oracle.go | 23 ++++++++--------------- server/initialize/gorm_pgsql.go | 25 ++++++++----------------- server/initialize/gorm_sqlite.go | 18 ++++++------------ 4 files changed, 33 insertions(+), 63 deletions(-) diff --git a/server/initialize/gorm_mysql.go b/server/initialize/gorm_mysql.go index 6e496a4d37..61e50ba293 100644 --- a/server/initialize/gorm_mysql.go +++ b/server/initialize/gorm_mysql.go @@ -12,41 +12,33 @@ import ( // GormMysql 初始化Mysql数据库 // Author [piexlmax](https://github.com/piexlmax) // Author [SliverHorn](https://github.com/SliverHorn) +// Author [ByteZhou-2018](https://github.com/ByteZhou-2018) func GormMysql() *gorm.DB { m := global.GVA_CONFIG.Mysql - if m.Dbname == "" { - return nil - } - mysqlConfig := mysql.Config{ - DSN: m.Dsn(), // DSN data source name - DefaultStringSize: 191, // string 类型字段的默认长度 - SkipInitializeWithVersion: false, // 根据版本自动配置 - } - if db, err := gorm.Open(mysql.New(mysqlConfig), internal.Gorm.Config(m.Prefix, m.Singular)); err != nil { - return nil - } else { - db.InstanceSet("gorm:table_options", "ENGINE="+m.Engine) - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(m.MaxIdleConns) - sqlDB.SetMaxOpenConns(m.MaxOpenConns) - return db - } + return initMysqlDatabase(m) } -// GormMysqlByConfig 初始化Mysql数据库用过传入配置 +// GormMysqlByConfig 通过传入配置初始化Mysql数据库 func GormMysqlByConfig(m config.Mysql) *gorm.DB { + return initMysqlDatabase(m) +} + +// initMysqlDatabase 初始化Mysql数据库的辅助函数 +func initMysqlDatabase(m config.Mysql) *gorm.DB { if m.Dbname == "" { return nil } + mysqlConfig := mysql.Config{ DSN: m.Dsn(), // DSN data source name DefaultStringSize: 191, // string 类型字段的默认长度 SkipInitializeWithVersion: false, // 根据版本自动配置 } + if db, err := gorm.Open(mysql.New(mysqlConfig), internal.Gorm.Config(m.Prefix, m.Singular)); err != nil { panic(err) } else { - db.InstanceSet("gorm:table_options", "ENGINE=InnoDB") + db.InstanceSet("gorm:table_options", "ENGINE="+m.Engine) sqlDB, _ := db.DB() sqlDB.SetMaxIdleConns(m.MaxIdleConns) sqlDB.SetMaxOpenConns(m.MaxOpenConns) diff --git a/server/initialize/gorm_oracle.go b/server/initialize/gorm_oracle.go index 4d18c8a84e..513359f0fa 100644 --- a/server/initialize/gorm_oracle.go +++ b/server/initialize/gorm_oracle.go @@ -15,32 +15,25 @@ import ( // 如果需要Oracle库 放开import里的注释 把下方 mysql.Config 改为 oracle.Config ; mysql.New 改为 oracle.New func GormOracle() *gorm.DB { m := global.GVA_CONFIG.Oracle - if m.Dbname == "" { - return nil - } - oracleConfig := mysql.Config{ - DSN: m.Dsn(), // DSN data source name - DefaultStringSize: 191, // string 类型字段的默认长度 - } - if db, err := gorm.Open(mysql.New(oracleConfig), internal.Gorm.Config(m.Prefix, m.Singular)); err != nil { - panic(err) - } else { - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(m.MaxIdleConns) - sqlDB.SetMaxOpenConns(m.MaxOpenConns) - return db - } + return initOracleDatabase(m) } // GormOracleByConfig 初始化Oracle数据库用过传入配置 func GormOracleByConfig(m config.Oracle) *gorm.DB { + return initOracleDatabase(m) +} + +// initOracleDatabase 初始化Oracle数据库的辅助函数 +func initOracleDatabase(m config.Oracle) *gorm.DB { if m.Dbname == "" { return nil } + oracleConfig := mysql.Config{ DSN: m.Dsn(), // DSN data source name DefaultStringSize: 191, // string 类型字段的默认长度 } + if db, err := gorm.Open(mysql.New(oracleConfig), internal.Gorm.Config(m.Prefix, m.Singular)); err != nil { panic(err) } else { diff --git a/server/initialize/gorm_pgsql.go b/server/initialize/gorm_pgsql.go index 625c873855..9dbcfd918e 100644 --- a/server/initialize/gorm_pgsql.go +++ b/server/initialize/gorm_pgsql.go @@ -13,25 +13,16 @@ import ( // Author [SliverHorn](https://github.com/SliverHorn) func GormPgSql() *gorm.DB { p := global.GVA_CONFIG.Pgsql - if p.Dbname == "" { - return nil - } - pgsqlConfig := postgres.Config{ - DSN: p.Dsn(), // DSN data source name - PreferSimpleProtocol: false, - } - if db, err := gorm.Open(postgres.New(pgsqlConfig), internal.Gorm.Config(p.Prefix, p.Singular)); err != nil { - return nil - } else { - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(p.MaxIdleConns) - sqlDB.SetMaxOpenConns(p.MaxOpenConns) - return db - } + return initPgSqlDatabase(p) } -// GormPgSqlByConfig 初始化 Postgresql 数据库 通过参数 +// GormPgSqlByConfig 初始化 Postgresql 数据库 通过指定参数 func GormPgSqlByConfig(p config.Pgsql) *gorm.DB { + return initPgSqlDatabase(p) +} + +// initPgSqlDatabase 初始化 Postgresql 数据库的辅助函数 +func initPgSqlDatabase(p config.Pgsql) *gorm.DB { if p.Dbname == "" { return nil } @@ -40,7 +31,7 @@ func GormPgSqlByConfig(p config.Pgsql) *gorm.DB { PreferSimpleProtocol: false, } if db, err := gorm.Open(postgres.New(pgsqlConfig), internal.Gorm.Config(p.Prefix, p.Singular)); err != nil { - panic(err) + return nil } else { sqlDB, _ := db.DB() sqlDB.SetMaxIdleConns(p.MaxIdleConns) diff --git a/server/initialize/gorm_sqlite.go b/server/initialize/gorm_sqlite.go index 041264107f..9d158bf16f 100644 --- a/server/initialize/gorm_sqlite.go +++ b/server/initialize/gorm_sqlite.go @@ -11,22 +11,16 @@ import ( // GormSqlite 初始化Sqlite数据库 func GormSqlite() *gorm.DB { s := global.GVA_CONFIG.Sqlite - if s.Dbname == "" { - return nil - } - - if db, err := gorm.Open(sqlite.Open(s.Dsn()), internal.Gorm.Config(s.Prefix, s.Singular)); err != nil { - panic(err) - } else { - sqlDB, _ := db.DB() - sqlDB.SetMaxIdleConns(s.MaxIdleConns) - sqlDB.SetMaxOpenConns(s.MaxOpenConns) - return db - } + return initSqliteDatabase(s) } // GormSqliteByConfig 初始化Sqlite数据库用过传入配置 func GormSqliteByConfig(s config.Sqlite) *gorm.DB { + return initSqliteDatabase(s) +} + +// initSqliteDatabase 初始化Sqlite数据库辅助函数 +func initSqliteDatabase(s config.Sqlite) *gorm.DB { if s.Dbname == "" { return nil } From 4964518486f812c46fe1c2bd7bf1b7a4c2865071 Mon Sep 17 00:00:00 2001 From: ByteZhou-2018 <1843607154@qq.com> Date: Tue, 18 Mar 2025 21:57:51 +0800 Subject: [PATCH 2/2] fix pgsql return error to panic --- server/initialize/gorm_pgsql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/initialize/gorm_pgsql.go b/server/initialize/gorm_pgsql.go index 9dbcfd918e..6abde5892b 100644 --- a/server/initialize/gorm_pgsql.go +++ b/server/initialize/gorm_pgsql.go @@ -31,7 +31,7 @@ func initPgSqlDatabase(p config.Pgsql) *gorm.DB { PreferSimpleProtocol: false, } if db, err := gorm.Open(postgres.New(pgsqlConfig), internal.Gorm.Config(p.Prefix, p.Singular)); err != nil { - return nil + panic(err) } else { sqlDB, _ := db.DB() sqlDB.SetMaxIdleConns(p.MaxIdleConns)