migrate para Go: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

migrate para Go: guia completo com exemplos práticos

A biblioteca migrate é uma ferramenta poderosa e flexível para gerenciar migrações de banco de dados no ecossistema Go. Ela permite que desenvolvedores versionem alterações no esquema do banco, apliquem e revertam migrações automaticamente, além de se integrar com diversos SGBDs, incluindo PostgreSQL, MySQL, SQLite, MongoDB, CockroachDB e outros. Neste artigo, vamos explorar detalhadamente como usar o migrate em Go, desde a instalação até técnicas avançadas.

O que é e por que usar

Durante o desenvolvimento de qualquer aplicação que interage com um banco de dados, mais cedo ou mais tarde surge a necessidade de alterar a estrutura das tabelas: adicionar uma nova coluna, criar um índice, modificar um tipo de dado ou renomear uma tabela. Se você trabalha em equipe ou implanta a aplicação em vários ambientes (desenvolvimento, staging, produção), executar scripts SQL manualmente se torna uma fonte de erros e inconsistências.

A biblioteca migrate resolve esse problema oferecendo uma maneira simples e declarativa de descrever as alterações no esquema. Cada migração é um par de arquivos: um para aplicar as alterações (up) e outro para reverter (down). A biblioteca monitora quais migrações já foram aplicadas e permite navegar com segurança para frente ou para trás no histórico de alterações.

Principais vantagens de usar o migrate:

  • Versionamento: cada migração possui um número ou timestamp único, permitindo saber exatamente qual versão do esquema está em uso.
  • Reprodutibilidade: você pode configurar um banco de dados do zero aplicando todas as migrações sequencialmente.
  • Segurança: a presença de migrações down permite reverter alterações em caso de erro.
  • Independência de linguagem: as migrações são escritas em SQL puro, tornando-as portáveis entre projetos em diferentes linguagens.

Instalação

Para instalar a biblioteca migrate em Go, use o comando padrão go get. Recomenda-se instalá-la como dependência do seu projeto:

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

Você também precisará instalar o driver para o seu banco de dados. Por exemplo, para PostgreSQL:

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

Para MySQL:

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

Para SQLite:

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

Além disso, você precisará de um driver para a fonte das migrações. O mais comum é o sistema de arquivos:

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

Também estão disponíveis drivers para io/fs, github, gitlab, s3 e outras fontes.

Início rápido — exemplo mínimo funcional

Vamos criar uma aplicação simples que se conecta a um banco SQLite e aplica migrações.

Primeiro, crie a estrutura de pastas para as migrações:

mkdir -p migrations
cd migrations

Crie a primeira migração. O nome do arquivo deve seguir o padrão: {versão}_{nome}.{direção}.sql. A versão geralmente é um timestamp ou um número sequencial.

Arquivo: migrations/000001_create_users_table.up.sql

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Arquivo: migrations/000001_create_users_table.down.sql

DROP TABLE IF EXISTS users;

Recommendations