Курс — «Программирование на 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 для начинающих».
