migrate for Go:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

migrate for Go:完整指南及示例

\n\n

migrate 库是 Go 生态系统中一个强大且灵活的数据库迁移管理工具。它允许开发人员对数据库模式变更进行版本控制,自动应用和回滚迁移,并能与各种数据库管理系统集成,包括 PostgreSQL、MySQL、SQLite、MongoDB、CockroachDB 等。在本文中,我们将从安装到高级技术,详细讲解如何在 Go 中使用 migrate。

\n\n

什么是 migrate 以及为什么需要它

\n\n

在开发任何与数据库交互的应用程序的过程中,迟早都需要修改表结构:添加新列、创建索引、更改数据类型或重命名表。如果您在团队中工作或在多个环境(开发、预发布、生产)中部署应用程序,手动执行 SQL 脚本会成为错误和不一致的根源。

\n\n

migrate 库通过提供一种简单且声明式的方式来描述模式变更,解决了这个问题。每次迁移都是一对文件:一个用于应用更改(up),另一个用于回滚(down)。该库会跟踪哪些迁移已被应用,并允许您在变更历史中安全地前进或后退。

\n\n

使用 migrate 的主要优势:

\n
    \n
  • 版本控制: 每次迁移都有一个唯一的编号或时间戳,可以精确知道当前使用的是哪个模式版本。
  • \n
  • 可重现性: 您可以通过依次应用所有迁移,从零开始部署数据库。
  • \n
  • 安全性: 存在 down 迁移,允许在出错时回滚更改。
  • \n
  • 语言无关性: 迁移使用纯 SQL 编写,使其可以在不同语言的项目之间移植。
  • \n
\n\n

安装

\n\n

要在 Go 中安装 migrate 库,请使用标准命令 go get。建议将其作为项目的依赖项安装:

\n\n
go get -u github.com/golang-migrate/migrate/v4
\n\n

您还需要为您的数据库安装驱动程序。例如,对于 PostgreSQL:

\n\n
go get -u github.com/golang-migrate/migrate/v4/database/postgres
\n\n

对于 MySQL:

\n\n
go get -u github.com/golang-migrate/migrate/v4/database/mysql
\n\n

对于 SQLite:

\n\n
go get -u github.com/golang-migrate/migrate/v4/database/sqlite3
\n\n

此外,您还需要一个用于迁移源的驱动程序。最常用的是文件系统:

\n\n
go get -u github.com/golang-migrate/migrate/v4/source/file
\n\n

此外,还提供用于 io/fs、github、gitlab、s3 等源的驱动程序。

\n\n

快速入门 — 最小工作示例

\n\n

让我们创建一个简单的应用程序,连接到 SQLite 数据库并应用迁移。

\n\n

首先,为迁移创建文件夹结构:

\n\n
mkdir -p migrations\ncd migrations
\n\n

创建第一个迁移。文件名必须符合模板:{版本}_{名称}.{方向}.sql。版本通常是时间戳或序列号。

\n\n

文件:migrations/000001_create_users_table.up.sql

\n
CREATE 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

推荐