migrate for Go:完整指南及示例
\n\nmigrate 库是 Go 生态系统中一个强大且灵活的数据库迁移管理工具。它允许开发人员对数据库模式变更进行版本控制,自动应用和回滚迁移,并能与各种数据库管理系统集成,包括 PostgreSQL、MySQL、SQLite、MongoDB、CockroachDB 等。在本文中,我们将从安装到高级技术,详细讲解如何在 Go 中使用 migrate。
\n\n什么是 migrate 以及为什么需要它
\n\n在开发任何与数据库交互的应用程序的过程中,迟早都需要修改表结构:添加新列、创建索引、更改数据类型或重命名表。如果您在团队中工作或在多个环境(开发、预发布、生产)中部署应用程序,手动执行 SQL 脚本会成为错误和不一致的根源。
\n\nmigrate 库通过提供一种简单且声明式的方式来描述模式变更,解决了这个问题。每次迁移都是一对文件:一个用于应用更改(up),另一个用于回滚(down)。该库会跟踪哪些迁移已被应用,并允许您在变更历史中安全地前进或后退。
使用 migrate 的主要优势:
\n- \n
- 版本控制: 每次迁移都有一个唯一的编号或时间戳,可以精确知道当前使用的是哪个模式版本。 \n
- 可重现性: 您可以通过依次应用所有迁移,从零开始部署数据库。 \n
- 安全性: 存在 down 迁移,允许在出错时回滚更改。 \n
- 语言无关性: 迁移使用纯 SQL 编写,使其可以在不同语言的项目之间移植。 \n
安装
\n\n要在 Go 中安装 migrate 库,请使用标准命令 go get。建议将其作为项目的依赖项安装:
go get -u github.com/golang-migrate/migrate/v4\n\n您还需要为您的数据库安装驱动程序。例如,对于 PostgreSQL:
\n\ngo get -u github.com/golang-migrate/migrate/v4/database/postgres\n\n对于 MySQL:
\n\ngo get -u github.com/golang-migrate/migrate/v4/database/mysql\n\n对于 SQLite:
\n\ngo get -u github.com/golang-migrate/migrate/v4/database/sqlite3\n\n此外,您还需要一个用于迁移源的驱动程序。最常用的是文件系统:
\n\ngo get -u github.com/golang-migrate/migrate/v4/source/file\n\n此外,还提供用于 io/fs、github、gitlab、s3 等源的驱动程序。
快速入门 — 最小工作示例
\n\n让我们创建一个简单的应用程序,连接到 SQLite 数据库并应用迁移。
\n\n首先,为迁移创建文件夹结构:
\n\nmkdir -p migrations\ncd migrations\n\n创建第一个迁移。文件名必须符合模板:{版本}_{名称}.{方向}.sql。版本通常是时间戳或序列号。
文件:migrations/000001_create_users_table.up.sql
\nCREATE TABLE IF NOT EXISTS users (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL,\n email TEXT NOT NULL UNIQUE,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\n文件:migrations/000001_create_users_t