package migrate import ( "gorm.io/gorm" ) // migrationFunc 定义一个函数类型,用于执行数据库迁移操作。 type migrationFunc func(gorm.Migrator, *gorm.DB) // migrationFiles 是一个切片,用于存储所有的迁移文件。 var migrationFiles []MigrationFile // MigrationFile 定义一个结构体,用于存储迁移文件的信息。 // 其中,Up 字段是一个函数类型,用于执行迁移操作;Down 字段是一个函数类型,用于回滚迁移操作;FileName 字段是迁移文件的名称。 type MigrationFile struct { Up migrationFunc // Up 方法用于执行迁移操作 Down migrationFunc // Down 方法用于回滚迁移操作 FileName string // FileName 用于存储迁移文件的名称 } // Add 新增一个迁移文件,所有的迁移文件都需要通过这个函数来注册。 // up 和 down 分别是执行迁移和回滚操作的函数,fileName 是迁移文件的名称。 func Add(up, down migrationFunc, fileName string) { migrationFiles = append(migrationFiles, MigrationFile{ Up: up, Down: down, FileName: fileName, }) } // getMigrationFile 用于根据迁移文件的名称获取对应的 MigrationFile 结构体。 func getMigrationFile(name string) MigrationFile { for _, file := range migrationFiles { if file.FileName == name { return file } } return MigrationFile{} } func (file *MigrationFile) isNotMigrated(migrations []Migration) bool { for _, migration := range migrations { if migration.Migration == file.FileName { return false } } return true }