Files
gormx/gormx.go
T
2025-07-12 17:12:24 +08:00

66 lines
1.6 KiB
Go

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
}