Найти в Дзене

Golang с нуля: работа с базами данных и GORM

(Статья 10 из цикла "Golang с нуля") В большинстве реальных приложений есть потребность в хранении данных, и базы данных — это стандартное решение. В Go вы можете работать с ними напрямую с помощью пакетов-драйверов, но гораздо удобнее использовать ORM (Object-Relational Mapping). В этой статье мы разберём, как работать с базами данных, используя самый популярный ORM для Go — GORM. ORM — это библиотека, которая помогает вам работать с данными в базе как с обычными Go-структурами, избавляя от необходимости писать "сырые" SQL-запросы. Это делает код более читаемым, сокращает его объём и снижает риск SQL-инъекций. GORM — это мощный, гибкий и простой в использовании ORM, который поддерживает все популярные базы данных: PostgreSQL, MySQL, SQLite и другие. Для начала нам нужно установить GORM и драйвер для нашей базы данных (например, SQLite).
go get gorm.io/gorm go get gorm.io/driver/sqlite
Теперь создадим простую модель (структуру) Product, которая будет соответствовать таблице в базе да
Оглавление

(Статья 10 из цикла "Golang с нуля")

В большинстве реальных приложений есть потребность в хранении данных, и базы данных — это стандартное решение. В Go вы можете работать с ними напрямую с помощью пакетов-драйверов, но гораздо удобнее использовать ORM (Object-Relational Mapping). В этой статье мы разберём, как работать с базами данных, используя самый популярный ORM для Go — GORM.

🔹 Что такое ORM и как GORM упрощает жизнь?

ORM — это библиотека, которая помогает вам работать с данными в базе как с обычными Go-структурами, избавляя от необходимости писать "сырые" SQL-запросы. Это делает код более читаемым, сокращает его объём и снижает риск SQL-инъекций.

GORM — это мощный, гибкий и простой в использовании ORM, который поддерживает все популярные базы данных: PostgreSQL, MySQL, SQLite и другие.

🔹 Шаг 1: Подключение к базе данных и создание модели

Для начала нам нужно установить GORM и драйвер для нашей базы данных (например, SQLite).

go get gorm.io/gorm

go get gorm.io/driver/sqlite

Теперь создадим простую модель (структуру) Product, которая будет соответствовать таблице в базе данных.

package main

import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"fmt"

)

// Product — модель для таблицы products

type Product struct {
gorm.Model // Включает поля ID, CreatedAt, UpdatedAt, DeletedAt
Code string
Price uint

}

func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("Ошибка: не удалось подключиться к базе данных.")
}

// Автоматическая миграция (создание таблицы)
db.AutoMigrate(&Product{})

// ... здесь будет наш код для работы с данными

}

gorm.Model — это встроенная структура, которая добавляет в вашу модель стандартные поля, необходимые для многих приложений.



🔹 Шаг 2: CRUD-операции

GORM предоставляет интуитивно понятные методы для выполнения основных операций с данными (Create, Read, Update, Delete).

Создание записи (Create):

// Создаем новую запись о товаре

db.Create(&Product{Code: "D42", Price: 100})

Чтение записей (Read):

var product Product

// Находим первый товар по условию

db.First(&product, "code = ?", "D42")

fmt.Println("Найден товар:", product.Code, product.Price)

// Находим все товары, цена которых > 50

var products []Product

db.Where("price > ?", 50).Find(&products)

fmt.Println("Количество товаров:", len(products))

Обновление записи (Update):

// Обновляем цену найденного товара

db.Model(&product).Update("Price", 200)

Удаление записи (Delete):

// Удаляем запись

db.Delete(&product, 1) // Удаляем по ID = 1


💡 Вывод

GORM — это мощный инструмент, который значительно ускоряет разработку приложений на Go, работающих с базами данных. Он позволяет сосредоточиться на бизнес-логике, абстрагируясь от сложностей SQL-запросов. Конечно, для очень сложных и специфичных запросов вы всегда можете использовать "сырой" SQL, но в большинстве случаев GORM — ваш лучший выбор.