Ответ
В Go нет "официальной" или встроенной в стандартную библиотеку ORM (Object-Relational Mapping). Сообщество Go часто придерживается философии явного и простого кода, поэтому многие разработчики предпочитают работать с SQL напрямую. Тем не менее, существует несколько мощных сторонних ORM и альтернативных инструментов.
Популярные ORM-библиотеки
-
GORM (
gorm.io/gorm)- Описание: Самая популярная и многофункциональная ORM для Go. Поддерживает хуки (hooks), eager loading, транзакции, миграции и имеет большую экосистему плагинов.
-
Пример:
type Product struct { gorm.Model Code string Price uint } db.AutoMigrate(&Product{}) // Автоматическая миграция схемы db.Create(&Product{Code: "D42", Price: 100}) // Создание записи
-
Ent (
entgo.io)- Описание: ORM от Facebook (Meta). Основная идея — кодогенерация на основе схемы, определенной в коде Go. Это обеспечивает строгую типизацию, безопасность и делает запросы более читаемыми, так как они строятся на основе сгенерированного графа.
Альтернативы ORM (часто предпочитаемые в Go)
Многие Go-разработчики избегают "магии" полноценных ORM в пользу более контролируемых инструментов.
-
database/sql- Описание: Стандартный пакет для работы с SQL. Предоставляет базовый, но надежный интерфейс для выполнения запросов и сканирования результатов. Требует написания SQL-запросов вручную.
-
sqlx- Описание: Расширение для
database/sql, которое упрощает работу. Позволяет сканировать результаты запросов напрямую вstructпо именам полей, работать с именованными параметрами в запросах и многое другое, при этом не скрывая сам SQL.
- Описание: Расширение для
-
sqlc- Описание: Генератор кода. Вы пишете чистые SQL-запросы (
CREATE TABLE,SELECT,INSERT), аsqlcгенерирует на их основе типобезопасный Go-код для их выполнения. Это сочетает полный контроль над SQL и безопасность типов.
- Описание: Генератор кода. Вы пишете чистые SQL-запросы (
Вывод: Выбор между ORM и альтернативами зависит от проекта. ORM (как GORM) ускоряют прототипирование и разработку CRUD-операций. Инструменты вроде sqlx и sqlc дают больше контроля над производительностью и самим SQL, что соответствует идиоматическому подходу в Go.
Ответ 18+ 🔞
Да ты посмотри, какая история-то, блядь! В Го нет никакой официальной ORM, понимаешь? Ну, то есть, встроенной в стандартную библиотеку — нихуя! Сообщество там такое, философия у них: «Давайте всё явно и просто, без вашей магии, нахуй». Поэтому многие так и пишут — SQL в лоб, руками. Но, конечно, нашлись умники, которые наделали библиотек, куда ж без этого.
Ну, библиотеки эти, ORM-шные
-
GORM (
gorm.io/gorm)- Что это: Самый, блядь, популярный монстр. Функций — овердохуища. Хуки там, eager loading, транзакции, миграции... Короче, всё, что душе угодно, если душа — ORM.
-
Примерчик, смотри:
type Product struct { gorm.Model Code string Price uint } db.AutoMigrate(&Product{}) // Щас он сам всё за тебя порешает, схемку создаст db.Create(&Product{Code: "D42", Price: 100}) // И запись воткнёт, красотаЧистая магия, блядь. Ты в коде поковырялся, а он в базе хуяк-хуяк — и готово.
-
Ent (
entgo.io)- Что это: А это уже от ребят из Facebook, ёпта. Тут концепция — кодогенерация. Ты схему на Го описываешь, а он тебе из неё код генерирует. Типизация строгая, запросы как по графу строятся — красиво, модно, молодежно. Для любителей, чтобы всё по полочкам.
А есть же те, кто ORM нахуй не нужен!
И таких, я тебе скажу, дофига. Говорят: «Да нахуй вашу магию, дайте мне контроль!».
-
database/sql- Что это: Да это же родной, стандартный пакет, ёбта! Надежный, как швейцарские часы, и тупой, как пробка. Весь SQL пишешь сам, строки, блядь, вручную. Результаты сканируешь тоже сам. Скучно, зато понятно, где и что протекает.
-
sqlx- Что это: Ну это как
database/sql, но на стероидах. Расширение, которое жизнь облегчает. Сканирует результаты из строк сразу в твоюstructпо именам полей, запросы с именованными параметрами поддерживает. SQL он у тебя не прячет, просто сахарку сверху насыпал. Многие его обожают.
- Что это: Ну это как
-
sqlc- Что это: Во, это вообще, блядь, хитрая жопа! Генератор кода. Ты не пишешь код на Го для запросов. Ты пишешь ЧИСТЫЙ, КРАСИВЫЙ SQL в отдельном файле.
CREATE TABLE,SELECT * FROM users WHERE id = $1. А потомsqlcберёт этот SQL, смотрит на него своим хитрым глазом и БАЦ — генерирует тебе типобезопасный Го-код, который эти запросы выполняет. Идея гениальная, ёпта! Контроль над SQL — полный, а безопасность типов — на уровне. Пиздец, как удобно.
- Что это: Во, это вообще, блядь, хитрая жопа! Генератор кода. Ты не пишешь код на Го для запросов. Ты пишешь ЧИСТЫЙ, КРАСИВЫЙ SQL в отдельном файле.
Итог, Колян, блядь: Выбор-то простой, на самом деле.
Хочешь быстро и чтобы не париться — бери GORM, хули. Прототип за пять минут наколбасишь.
А если ты перфекционист ебаный и тебе надо знать каждый чих базы данных, чтоб всё летало — тогда тебе в стан ненавистников ORM. sqlx или sqlc — вот твои лучшие друзья. Всё по чесноку, без сюрпризов. Как говорится, волнение ебать, а терпения — ноль. Выбирай, что душе угодно.