Курс — «Программирование на Go для начинающих» — #22 Работа с базами данных. Миграции и работа с данными.
Здравствуйте, дорогие друзья.
Миграции баз данных в Go
Миграции баз данных — это контролируемый способ обновления схемы базы данных, а также управления её версиями. Миграции позволяют разработчикам вносить изменения в структуру базы данных (например, добавление новых таблиц, изменение существующих столбцов) таким образом, чтобы эти изменения могли быть применены в любой среде (разработка, тестирование, продакшн) с минимальными усилиями.
Инструменты для миграции
В экосистеме Go существует несколько популярных инструментов для управления миграциями баз данных, включая:
- Goose: Простой инструмент для миграции, поддерживающий SQL-скрипты и Go-функции для миграций.
- Gormigrate: Инструмент для миграции, интегрированный с ORM GORM, позволяющий использовать Go-код для определения миграций.
- Flyway: Хотя это не инструмент, специфичный для Go, Flyway поддерживает миграции через SQL-скрипты и может быть интегрирован в Go-проекты.
Пример миграции с использованием Goose
- Установите Goose:
go get -u github.com/pressly/goose/cmd/goose
2. Создайте новую миграцию
goose create add_users_table sql
Это создаст новый SQL-файл в директории миграций, где вы можете определить изменения схемы (например, создание таблицы users
).
3. Примените миграции:
goose up
Эта команда применит все новые миграции к вашей базе данных.
1 |
Работа с данными
Работа с данными в Go обычно включает в себя выполнение CRUD-операций (создание, чтение, обновление, удаление) с использованием либо стандартного пакета database/sql
для SQL-баз данных, либо специализированных драйверов и библиотек для NoSQL-баз данных.
Создание записи
1 2 3 4 |
_, err := db.Exec("INSERT INTO users (name, email) VALUES ($1, $2)", "John Doe", "john@example.com") if err != nil { log.Fatal(err) } |
Чтение данных
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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) } |
Обновление и удаление
1 2 3 4 5 6 7 8 |
_, 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 существует множество инструментов и библиотек, которые облегчают эти задачи, предоставляя разработчикам гибкие и мощные средства для управления данными и схемами баз данных.
На этом все. Всем хорошего дня!
Цикл статей по курсу: «Язык программирования Go для начинающих».