From 4d7c9e5a126e1a1a19739c9cd634fdbb711683d0 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Fri, 14 Aug 2026 16:46:53 +0800 Subject: [PATCH] =?UTF-8?q?feat=E2=9C=A8:=20=E8=A1=A5=E5=85=85=20demo=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=9A=84=E5=BB=BA=E8=A1=A8=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 放在 version/ 而非 version-local/:后者已被 .gitignore 忽略,是留给使用 者存放自身迁移脚本的位置,示例迁移需随框架一起分发。文件注释中说明了这 一区分。 --- .../version/1786700000000_demo_product.go | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 cmd/migrate/migration/version/1786700000000_demo_product.go diff --git a/cmd/migrate/migration/version/1786700000000_demo_product.go b/cmd/migrate/migration/version/1786700000000_demo_product.go new file mode 100644 index 00000000..a6e91bc7 --- /dev/null +++ b/cmd/migrate/migration/version/1786700000000_demo_product.go @@ -0,0 +1,42 @@ +package version + +import ( + "runtime" + + "gorm.io/gorm" + + "go-admin/app/demo/models" + "go-admin/cmd/migrate/migration" + common "go-admin/common/models" +) + +// 示例模块的建表迁移。 +// +// 迁移文件名前 13 位是版本号(Unix 毫秒时间戳),框架按文件名升序执行, +// 已执行的版本记录在 sys_migration 表中,不会重复运行。 +// +// 本文件放在 version/ 是因为它随框架一起分发;**业务项目自己的迁移应放 +// version-local/**,该目录已被 .gitignore 忽略,不会与上游冲突。 +// +// 生成新的迁移骨架:go run main.go migrate -c config/settings.yml -g +// +// 注意:已执行过的迁移文件不可再修改——版本号已入表,改动不会重跑。 +// 需要调整时新建一个迁移。 +func init() { + _, fileName, _, _ := runtime.Caller(0) + migration.Migrate.SetVersion(migration.GetFilename(fileName), _1786700000000DemoProduct) +} + +func _1786700000000DemoProduct(db *gorm.DB, version string) error { + return db.Transaction(func(tx *gorm.DB) error { + // 1. 建表 + if err := tx.Migrator().AutoMigrate(new(models.DemoProduct)); err != nil { + return err + } + + // 2. 初始化数据(可选)。此处留空,示例模块不写入业务数据。 + + // 3. 记录版本号——必须,否则该迁移每次启动都会重跑 + return tx.Create(&common.Migration{Version: version}).Error + }) +}