/* @Time : 2020/6/28 21:46 @Author : xuyiqing @File : init.py */ package models import ( "fmt" "go_blog/config" "go_blog/pkg/util" "log/slog" "os" "time" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/schema" ) var DB *gorm.DB func InitDatabase(conf *config.Config) { conUri := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local", conf.DataBase.User, conf.DataBase.Password, conf.DataBase.Host, conf.DataBase.Port, conf.DataBase.DBName, conf.DataBase.Charset) // 2. 初始化数据库 db, err := gorm.Open(mysql.Open(conUri), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: conf.DataBase.Prefix, }, }) if err != nil { slog.Error("数据库连接失败", "error", err) os.Exit(1) } sqlDB, _ := db.DB() defer func() { if err := sqlDB.Close(); err != nil { slog.Error("数据库关闭异常", "error", err) } }() 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 }