package bootstrap import ( "os" "sync" sqliteDB "github.com/glebarez/sqlite" "github.com/sirupsen/logrus" "gorm.io/gorm" ) var BlogDB *DB var FileDB *DB type DB struct { Gorm *gorm.DB Mutex *sync.RWMutex } // sqlite无法同时多个线程写入,需要上锁保护,读操作无需考虑 func (db *DB) WGorm(txFunc func(tx *gorm.DB) error) error { db.Mutex.Lock() err := db.Gorm.Transaction(txFunc) db.Mutex.Unlock() return err } func initBlogGorm() { path := Config.Database.Sqlite.BlogPath logrus.Info("数据库文件位置:", path) _, err := os.Stat(path) if err != nil || os.IsNotExist(err) { panic("SQLite数据库文件不存在!") } orm, err := gorm.Open(sqliteDB.Open(path), &gorm.Config{}) if err != nil { panic("BlogGorm初始化异常!" + err.Error()) } // orm.Exec("PRAGMA journal_mode=WAL;") BlogDB = &DB{ Gorm: orm, Mutex: &sync.RWMutex{}, } logrus.Info("SQLite连接成功,BlogGorm初始化完成") } func initFileGorm() { path := Config.Database.Sqlite.FilePath logrus.Info("数据库文件位置:", path) // path := "./sqlite.db" _, err := os.Stat(path) if err != nil || os.IsNotExist(err) { panic("sqlite数据库文件不存在!") } orm, err := gorm.Open(sqliteDB.Open(path), &gorm.Config{}) if err != nil { panic("Gorm初始化异常!" + err.Error()) } // orm.Exec("PRAGMA journal_mode=WAL;") FileDB = &DB{ Gorm: orm, Mutex: &sync.RWMutex{}, } logrus.Info("SQLite连接成功,FileGorm初始化完成") }