> Как реализовать миграции базы данных (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Лукойл

Стек: Go

> Пример ответа

Миграции базы данных в Go чаще всего реализуются с помощью специализированных библиотек, таких как golang-migrate/migrate или pressly/goose. Основная идея - хранить изменения схемы (SQL-скрипты) в версионированных файлах и применять их последовательно.

Пример реализации с golang-migrate/migrate:

  1. Установка библиотеки: go get -u github.com/golang-migrate/migrate/v4
  2. Создание папки migrations с файлами вида 000001_create_users_table.up.sql и 000001_create_users_table.down.sql (для отката).
  3. Написание SQL-скрипта (например, up.sql):
SQL
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
  1. Применение миграций в коде:
GO
import (
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
)
func RunMigrations(databaseURL string) error {
m, err := migrate.New("file://migrations", databaseURL)
if err != nil {
return err
}
if err := m.Up(); err != nil && err != migrate.ErrNoChange {
return err
}
return nil
}
  1. Для отката используется m.Down().

Альтернативно, goose предлагает более гибкий подход с поддержкой Go-функций в миграциях. В production-среде миграции обычно запускаются при старте приложения или отдельным CLI-командой. Важно всегда иметь down-миграции для безопасного отката и тестировать изменения на копии базы данных перед применением.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью