Найти тему

Курс - «Программирование на Go для начинающих» - #22 Работа с базами данных. Миграции и работа с данными.

Оглавление

Миграции баз данных в Go

Миграции баз данных — это контролируемый способ обновления схемы базы данных, а также управления её версиями. Миграции позволяют разработчикам вносить изменения в структуру базы данных (например, добавление новых таблиц, изменение существующих столбцов) таким образом, чтобы эти изменения могли быть применены в любой среде (разработка, тестирование, продакшн) с минимальными усилиями.

Инструменты для миграции

В экосистеме Go существует несколько популярных инструментов для управления миграциями баз данных, включая:

  • Goose: Простой инструмент для миграции, поддерживающий SQL-скрипты и Go-функции для миграций.
  • Gormigrate: Инструмент для миграции, интегрированный с ORM GORM, позволяющий использовать Go-код для определения миграций.
  • Flyway: Хотя это не инструмент, специфичный для Go, Flyway поддерживает миграции через SQL-скрипты и может быть интегрирован в Go-проекты.

Пример миграции с использованием Goose

  1. Установите Goose:

go get -u github.com/pressly/goose/cmd/goose

  1. Создайте новую миграцию:

goose create add_users_table sql

Это создаст новый SQL-файл в директории миграций, где вы можете определить изменения схемы (например, создание таблицы users).

  1. Примените миграции:

goose up

Эта команда применит все новые миграции к вашей базе данных.

Работа с данными

Работа с данными в Go обычно включает в себя выполнение CRUD-операций (создание, чтение, обновление, удаление) с использованием либо стандартного пакета database/sql для SQL-баз данных, либо специализированных драйверов и библиотек для NoSQL-баз данных.

Создание записи

_, err := db.Exec("INSERT INTO users (name, email) VALUES ($1, $2)", "John Doe", "john@example.com")
if err != nil {
log.Fatal(err)
}

Чтение данных

rows, err := db.Query("SELECT id, name, email FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name, email string
if err := rows.Scan(&id, &name, &email); err != nil {
log.Fatal(err)
}
fmt.Printf("%d: %s <%s>\n", id, name, email)
}

Обновление и удаление

_, err = db.Exec("UPDATE users SET email = $1 WHERE id = $2", "newjohn@example.com", 1)
if err != nil {
log.Fatal(err)
}
_, err = db.Exec("DELETE FROM users WHERE id = $1", 1)
if err != nil {
log.Fatal(err)
}

Миграции и работа с данными являются ключевыми аспектами разработки приложений, работающих с базами данных. В Go существует множество инструментов и библиотек, которые облегчают эти задачи, предоставляя разработчикам гибкие и мощные средства для управления данными и схемами баз данных.