Фантастическая библиотека ORM для Golang призвана быть дружественной для разработчиков.
Обзор
Полнофункциональный ORM
Связи (Has One (имеет одну), Has Many (имеет много), Belongs To (принадлежит), Many To Many (многие ко многим), Polymorphism (полиморфизм), Single-table inheritance (одно табличное представление))
Хуки (До/После Создать/Сохранить/Обновить/Удалить/Найти)
Нетерпеливая загрузка с помощью Preload
, Joins
Транзакции, вложенные транзакции, точки сохранения, откат к сохраненной точке
Context, Prepared Statement Mode, DryRun Mode
Batch Insert, FindInBatches, Find/Create with Map, CRUD with SQL Expr and Context Valuer
SQL Builder, Upsert, Locking, Optimizer/Index/Comment Hints, Named Argument, SubQuery
Композитный первичный ключ, Индексы, Зависимости
Автомиграция
Logger
Расширяемый плагин API: Резолвер Баз данных (Множество БД, Разделение чтения/записи) / Prometheus…
Каждая функция поставляется с тестами
Дружественная для разработчиков
Установка go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite
Быстрый старт package mainimport ( "gorm.io/gorm" "gorm.io/driver/sqlite" ) type Product struct { gorm.Model Code string Price uint } func main () { db, err := gorm.Open(sqlite.Open("test.db" ), &gorm.Config{}) if err != nil { panic ("failed to connect database" ) } db.AutoMigrate(&Product{}) db.Create(&Product{Code: "D42" , Price: 100 }) var product Product db.First(&product, 1 ) db.First(&product, "code = ?" , "D42" ) db.Model(&product).Update("Price" , 200 ) db.Model(&product).Updates(Product{Price: 200 , Code: "F42" }) db.Model(&product).Updates(map [string ]interface {}{"Price" : 200 , "Code" : "F42" }) db.Delete(&product, 1 ) }