package gormx import ( "fmt" "time" "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=%s&parseTime=True", defaultOpts.Mysql.User, defaultOpts.Mysql.Password, defaultOpts.Mysql.Host, defaultOpts.Mysql.Port, defaultOpts.Mysql.Database, defaultOpts.Charset, ) 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` }, NowFunc: func() time.Time { return time.Now().In(defaultOpts.Location) // 设置时区 }, Logger: NewGormxLogger(defaultOpts.Logger), }) if err != nil { panic(err) } // 连接池设置 // sqlDB, _ := db.DB() // sqlDB.SetMaxIdleConns(m.MaxIdleConns) // sqlDB.SetMaxOpenConns(m.MaxOpenConns) return db }