Модели и AutoMigrate
Определяйте схему и выполняйте миграции
«Модели и AutoMigrate» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое GORM
GORM — самая популярная ORM для Go. Она сопоставляет структуры Go с таблицами базы данных, поэтому Вы работаете с объектами, а не с необработанным SQL. Она поддерживает PostgreSQL, MySQL, SQLite и другие базы данных.
- Сопоставление структур с таблицами
- Автоматические миграции
- Связи и обработчики событий
Определение модели
Модель — это структура Go. Каждое экспортируемое поле становится столбцом. Встраивание gorm.Model добавляет поля ID, CreatedAt, UpdatedAt и DeletedAt.
type User struct {
gorm.Model
Name string
Email string
Age int
}Теги полей
Теги структур позволяют настроить столбцы. С помощью тега gorm можно задать размер, уникальность, индексы и значения по умолчанию. Тег записывается в обратных кавычках после типа поля, например gorm:"uniqueIndex;size:255".
type User struct {
// ID uint tag: gorm:"primaryKey"
// Email string tag: gorm:"uniqueIndex;size:255"
// Name string tag: gorm:"not null"
ID uint
Email string
Name string
}Соглашения об именовании
По умолчанию GORM образует множественное число и использует snake_case: структура User сопоставляется с таблицей users, а поле CreatedAt — со столбцом created_at. Эти правила можно переопределить.
Открытие базы данных с помощью GORM
gorm.Open принимает диалектор для Вашей базы данных и возвращает объект *gorm.DB. Этот объект представляет пул соединений.
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}AutoMigrate
AutoMigrate создаёт таблицы, отсутствующие столбцы и индексы в соответствии с Вашими структурами. Эта операция добавляющая: она не удаляет столбцы и не изменяет типы разрушительным образом.
db.AutoMigrate(&User{}, &Product{})Чего не делает AutoMigrate
AutoMigrate никогда не удаляет неиспользуемые столбцы и не уменьшает типы, чтобы избежать потери данных. Для переименований, удаления столбцов или изменения типов нужны явные инструменты миграции.
Рабочая симуляция сопоставления модели
GORM нужен настоящий драйвер базы данных, поэтому этот запускаемый пример моделирует сопоставление таблиц и столбцов в snake_case, которое выполняет AutoMigrate.
package main
import (
"fmt"
"strings"
)
func toSnake(s string) string {
var b strings.Builder
for i, r := range s {
if i > 0 && r >= 65 && r <= 90 {
b.WriteByte(95)
}
if r >= 65 && r <= 90 {
r = r + 32
}
b.WriteRune(r)
}
return b.String()
}
func main() {
model := "User"
fields := []string{"ID", "Name", "CreatedAt"}
fmt.Println("table:", toSnake(model)+"s")
for _, f := range fields {
fmt.Println("column:", toSnake(f))
}
}Поле DeletedAt
Если Ваша модель встраивает gorm.Model или содержит поле gorm.DeletedAt, GORM включает мягкое удаление. Для удалённых записей сохраняется временная метка, а сами записи скрываются из результатов запросов вместо физического удаления.
Пользовательские имена таблиц
Реализуйте в модели метод TableName, чтобы переопределить имя по умолчанию. Это удобно, если в Вашей схеме используются имена, не соответствующие соглашениям GORM.
func (User) TableName() string {
return "app_users"
}Примечание о внешнем пакете
GORM и его диалекторы не входят в стандартную библиотеку, поэтому нужны go get gorm.io/gorm и драйвер, например gorm.io/driver/postgres. Приведённые здесь фрагменты GORM носят иллюстративный характер.
Быстрая проверка
Проверьте свои знания о моделях.
Итоги
Вы изучили модели и AutoMigrate:
- Структуры сопоставляются с таблицами; gorm.Model добавляет ID и временные метки
- Теги задают первичные ключи, индексы и ограничения
- По умолчанию используются множественное число и snake_case
- AutoMigrate только добавляет элементы и никогда не выполняет разрушительных изменений
- DeletedAt включает мягкое удаление
Часто задаваемые вопросы
Урок «Модели и AutoMigrate» бесплатный?
Да — полный текст урока «Модели и AutoMigrate» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Модели и AutoMigrate»?
Определяйте схему и выполняйте миграции Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Модели и AutoMigrate»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Модели и AutoMigrate
- Операции CRUD
- Ассоциации
- Хуки и области видимости