package gormx import ( "context" "fmt" "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/schema" ) func NewGorm(opts ...Option) *gorm.DB { defaultOpts := defaultOptions() for _, apply := range opts { apply(&defaultOpts) } if defaultOpts.Db == "" { panic("db is empty") } var dialector gorm.Dialector if defaultOpts.Db == "mysql" { if defaultOpts.Mysql == nil { panic("mysql is not supported") } dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=%s", defaultOpts.Mysql.User, defaultOpts.Mysql.Password, defaultOpts.Mysql.Host, defaultOpts.Mysql.Port, defaultOpts.Mysql.Database, defaultOpts.Loc, ) dialector = mysql.Open(dsn) } else if defaultOpts.Db == "sqlite" { if defaultOpts.Sqlite == nil { panic("sqlite is not supported") } dialector = sqlite.Open(defaultOpts.Sqlite.DbPath) } db, err := gorm.Open(dialector, &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: defaultOpts.Prefix, // 表名前缀,`Article` 的表名应该是 `it_articles` SingularTable: defaultOpts.SingularTable, // 使用单数表名,启用该选项,此时,`Article` 的表名应该是 `it_article` }, Logger: NewGormxLogger(context.TODO()), }) if err != nil { panic(err) } // 连接池设置 // sqlDB, _ := db.DB() // sqlDB.SetMaxIdleConns(m.MaxIdleConns) // sqlDB.SetMaxOpenConns(m.MaxOpenConns) return db }