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, которые можно изучить в официальной документации.