Операции CRUD
Создавайте, читайте, обновляйте и удаляйте данные
«Операции CRUD» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Операции CRUD с GORM
GORM превращает четыре базовые операции — Create, чтение, Update, Delete — в вызовы методов объекта *gorm.DB. Вы передаёте указатели на структуры, а GORM формирует SQL.
Create
Create добавляет запись. После выполнения GORM заполняет первичный ключ и временные метки структуры данными из базы.
user := User{Name: "Ada", Email: "ada@example.com"}
result := db.Create(&user)
fmt.Println(user.ID, result.RowsAffected)Чтение с помощью First
First получает первую подходящую запись, отсортированную по первичному ключу. Передайте указатель, чтобы получить результат; условия передаются дополнительными аргументами.
var user User
db.First(&user, 1) // by primary key
db.First(&user, "email = ?", "ada@example.com")Чтение нескольких записей с помощью Find
Find загружает несколько строк в срез. Без условий он возвращает все строки, а с Where выполняет фильтрацию.
var users []User
db.Where("age > ?", 18).Find(&users)Update
Save обновляет все поля записи. Update и Updates изменяют только указанные столбцы, поэтому поля, которые Вы не собирались менять, не перезаписываются.
db.Model(&user).Update("name", "Ada L.")
db.Model(&user).Updates(User{Name: "Ada", Age: 36})Особенность нулевых значений
При обновлении с помощью структуры GORM игнорирует поля с нулевыми значениями (0, false, ""). Чтобы установить для столбца нулевое значение, передайте карту вместо структуры.
db.Model(&user).Updates(map[string]interface{}{"age": 0, "active": false})Delete
Delete удаляет запись. Если у модели есть поле DeletedAt, выполняется мягкое удаление: устанавливается временная метка, а строка не удаляется.
db.Delete(&user, 1)Рабочая симуляция CRUD
GORM нужна настоящая база данных, поэтому этот запускаемый пример моделирует создание, чтение, обновление и удаление во временном срезе, чтобы показать жизненный цикл записи.
package main
import "fmt"
type User struct {
ID int
Name string
}
func main() {
var users []User
next := 1
// Create
u := User{ID: next, Name: "Ada"}
users = append(users, u)
next++
// Read
fmt.Println("read:", users[0])
// Update
users[0].Name = "Ada L."
fmt.Println("updated:", users[0])
// Delete
users = users[:0]
fmt.Println("count after delete:", len(users))
}Проверка ошибок
Каждый вызов GORM возвращает объект *gorm.DB, поле Error которого содержит сведения о любой ошибке. Если запись не найдена, вызов First возвращает gorm.ErrRecordNotFound.
if err := db.First(&user, 99).Error; err == gorm.ErrRecordNotFound {
fmt.Println("no such user")
}Цепочки методов
GORM использует конструктор с цепочкой вызовов: db.Where(...).Order(...).Limit(...).Find(&users). Каждый метод уточняет запрос, а последний метод (Find, First) выполняет его.
Пакетная вставка
Передайте срез в Create, чтобы вставить много строк одним выражением. CreateInBatches разделяет очень большие срезы на части, чтобы не превышать ограничения.
db.Create(&[]User{{Name: "A"}, {Name: "B"}})Быстрая проверка
Проверьте свои знания об операциях CRUD.
Итоги
Вы изучили операции CRUD:
- Create вставляет запись и заполняет первичный ключ
- First и Find считывают одну или несколько строк
- Сохранение, Update и Updates изменяют данные; карты принудительно устанавливают нулевые значения
- Delete выполняет мягкое удаление, если существует DeletedAt
- Проверяйте поле Error; объединяйте методы в цепочки для сложных запросов
Часто задаваемые вопросы
Урок «Операции CRUD» бесплатный?
Да — полный текст урока «Операции CRUD» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Операции CRUD»?
Создавайте, читайте, обновляйте и удаляйте данные Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Операции CRUD»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.