/* @Time : 2020/6/28 21:46 @Author : xuyiqing @File : init.py */ package models import ( "go_blog/config" "go_blog/pkg/util" "log/slog" "os" "time" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/schema" ) var DB *gorm.DB func InitDatabase(conf *config.Config) { var dialector gorm.Dialector switch conf.DataBase.Driver { case "mysql": dialector = mysql.Open(conf.DataBase.DSN) case "postgres": dialector = postgres.Open(conf.DataBase.DSN) case "sqlite": dialector = sqlite.Open(conf.DataBase.DSN) default: slog.Error("不支持的数据库驱动", "driver", conf.DataBase.Driver) os.Exit(1) } db, err := gorm.Open(dialector, &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: conf.DataBase.Prefix, }, }) if err != nil { slog.Error("数据库连接失败", "error", err) os.Exit(1) } DB = db // 3. 自动迁移数据模型 db.AutoMigrate(&Account{}) db.AutoMigrate(&Content{}) // if err := db.AutoMigrate(&models.Article{}, &models.User{}); err != nil { // panic("数据库迁移失败: " + err.Error()) // } } type BaseModel struct { ID uint64 `gorm:"primary_key'" json:"id"` CreatedAt time.Time `json:"-"` UpdatedAt time.Time `json:"-"` DeletedAt *time.Time `sql:"index" json:"-"` } // 生成全局唯一ID func (m *BaseModel) BeforeCreate(scope *gorm.DB) error { if m.ID == 0 { m.ID = util.GenSonyFlakeId() } return nil }