golang примеры использования GORM

GORM — это ORM-библиотека для Go, которая позволяет упростить работу с базами данных. Вот несколько примеров использования GORM для выполнения основных операций с базой данных: ### 1. Подключение к базе данных Для начала нужно подключиться к базе данных. В этом примере используется PostgreSQL, но GORM поддерживает и другие базы данных, такие как MySQL, SQLite, и MSSQL. ```go package main import ( "gorm.io/driver/postgres" "gorm.io/gorm" "log" ) func main() { dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Теперь у вас есть объект db, который можно использовать для выполнения запросов } ``` ### 2. Создание модели GORM использует структуры Go для представления таблиц в базе данных. Вот пример модели `User`: ```go type User struct { gorm.Model Name string Email string } ``` ### 3. Миграция таблиц GORM может автоматически создавать таблицы в базе данных на основе ваших моделей. ```go func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Миграция таблицы User db.AutoMigrate(&User{}) } ``` ### 4. Создание записи Теперь можно создать новую запись в таблице `User`. ```go func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Создание нового пользователя user := User{Name: "John Doe", Email: "john@example.com"} result := db.Create(&user) if result.Error != nil { log.Fatal("Failed to create user:", result.Error) } log.Println("User created with ID:", user.ID) } ``` ### 5. Чтение записи Чтобы прочитать запись из базы данных, можно использовать метод `First`, `Find`, или другие методы GORM. ```go func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Чтение пользователя по ID var user User result := db.First(&user, 1) // Найти пользователя с ID = 1 if result.Error != nil { log.Fatal("Failed to find user:", result.Error) } log.Println("User found:", user) } ``` ### 6. Обновление записи Чтобы обновить существующую запись, можно использовать метод `Save` или `Update`. ```go func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Чтение пользователя по ID var user User result := db.First(&user, 1) // Найти пользователя с ID = 1 if result.Error != nil { log.Fatal("Failed to find user:", result.Error) } // Обновление данных пользователя user.Email = "john.doe@example.com" result = db.Save(&user) if result.Error != nil { log.Fatal("Failed to update user:", result.Error) } log.Println("User updated:", user) } ``` ### 7. Удаление записи Чтобы удалить запись, можно использовать метод `Delete`. ```go func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Чтение пользователя по ID var user User result := db.First(&user, 1) // Найти пользователя с ID = 1 if result.Error != nil { log.Fatal("Failed to find user:", result.Error) } // Удаление пользователя result = db.Delete(&user) if result.Error != nil { log.Fatal("Failed to delete user:", result.Error) } log.Println("User deleted") } ``` ### 8. Запросы с условиями GORM позволяет выполнять запросы с условиями, сортировкой, пагинацией и другими параметрами. ```go func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Найти всех пользователей с именем "John" var users []User result := db.Where("name = ?", "John").Find(&users) if result.Error != nil { log.Fatal("Failed to find users:", result.Error) } log.Println("Users found:", users) } ``` ### 9. Связи между таблицами GORM также поддерживает связи между таблицами, такие как `has one`, `has many`, `belongs to`, и `many to many`. ```go type Profile struct { gorm.Model UserID uint Bio string } type User struct { gorm.Model Name string Email string Profile Profile `gorm:"foreignKey:UserID"` } func main() { // Подключение к базе данных dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Asia/Shanghai" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Failed to connect to database:", err) } // Миграция таблиц db.AutoMigrate(&User{}, &Profile{}) // Создание пользователя с профилем user := User{ Name: "John Doe", Email: "john@example.com", Profile: Profile{ Bio: "I am a software developer", }, } result := db.Create(&user) if result.Error != nil { log.Fatal("Failed to create user:", result.Error) } log.Println("User created with ID:", user.ID) } ``` Это основные примеры использования GORM для работы с базой данных в Go. GORM предоставляет множество других функций, таких как транзакции, хуки, и настройка поведения ORM, которые можно изучить в официальной документации.