Перейти с ORM - в дыру G (orm)
Привет!
Эта статья предназначена для разработчиков, которым нужна быстрая установка Go-ORM. Мы будем создавать бэкэнд Go с GORM, подключать его к Postgres DB и реализовывать операции CRUD.
Для простой настройки, без ORM, вы можете прочитать мою статью здесь
Go: Что?
ORM (объектно-реляционное сопоставление) - это метод программирования для преобразования несовместимых типов данных. Представьте, что два человека, говорящие на разных языках, пытаются разговаривать друг с другом: либо они нанимают переводчика, либо изучают общий язык для общения. Вот как в основном работает ORM, преобразуя таблицы в объекты, которые можно использовать в коде, со всеми преимуществами объектно-ориентированного программирования.
Go: Почему?
ORM помогает избежать повторных запросов к базе данных (СУХОЙ!). Поскольку он сопоставляет ваши таблицы с объектом, вы можете использовать таблицу так же, как и объект. Вы можете искать внутри объекта, вы можете добавлять значения к своему объекту, удалять объект. Все удовольствие от объектно-ориентированного программирования теперь доступно вам благодаря таблицам базы данных! Это приводит к более чистому коду. Также нам не придется много работать с необработанными запросами.
Единственным недостатком является то, что вы научились использовать библиотеку ORM, которую реализуете. К счастью, в Интернете есть множество руководств, подобных этому, которые помогут вам в вашем путешествии.
Go: как?
Мы начинаем наше путешествие в дыру G (orm), структурируя наш код следующим образом
Создаем наш модуль, выполнив команду
$ go mod init <your-module-name>
Затем устанавливаем необходимые пакеты
$ go get github.com/gorilla/mux $ go get github.com/jinzhu/gorm
Будут созданы файлы go.mod
и go.sum
. Они содержат манифест модуля и контрольную сумму пакета соответственно. Теперь приступим к собственно кодированию.
Сообщение
Сначала мы определяем, как сообщение хранится и отображается для нас. Введите следующий код в файл models/post.go
.
- gorm.Model сообщает компилятору, что структура должна быть сопоставлена с таблицей в базе данных.
- `gorm:” type: varchar (255); ” json: ”title” ` заставляет компилятор понять, что в базе данных GORM должен сохранить его как varchar, но при отображении пользователю он должен отображать json.
- Мы добавляем две функции, чтобы помочь нам в создании сообщения или получении массива сообщений.
Подключение к базе данных
Нам нужно подключиться к базе данных. ГОРМ позволяет нам подключаться к базе данных с разными диалектами. Здесь мы будем использовать диалект postgres, так как в этом руководстве мы используем Postgres DB. Вы можете изменить его на другие диалекты, если используете другие базы данных, такие как MySQL, Sqlite3 и т. Д.
Введите следующий код в файл utility/database.go
Теперь наш файл подключения готов, мы его протестируем. Нам просто нужно создать главный файл для его вызова.
Главный файл
В корневой папке нашего приложения мы создаем файл main.go
. Добавьте следующий код.
Запустите его с помощью команды
$ go run main.go
Он должен вывести DB Connection established
Все хорошо! Мы на верном пути!
Теперь реализуем код для CRUD-операций.
ПОЛУЧИТЬ: ВСЕ ЗАПИСИ
Мы создадим файл маршрута, который расскажет, какой маршрут API для какого задания.
Создайте файл routes/routes.go
и добавьте следующий код
Теперь мы создаем служебный файл и добавляем код для извлечения всех сообщений из базы данных.
Добавьте следующий код в файл services/service.go
Обратите внимание на следующие компоненты
- func SetDB (db * gorm.DB): - Создает глобальное подключение базы данных, доступной для службы. Функция AutoMigrate () помогает создавать таблицы в базе данных, если таблиц не существовало. GORM делает это за нас, чтобы нам не приходилось писать утомительные запросы CREATE.
- Структура ответа: - Это объект ответа, созданный для использования пользователем. Мы отправляем этот объект при статусе 200 OK. Этот объект будет содержать поле данных для отправки данных публикации и поле сообщения для отправки сообщения, например «УСПЕШНО» / «ОБНОВЛЕНО» / «УДАЛЕНО».
В функции GetAllPosts мы создаем объект ответа, сообщаем GORM, что нужно получить все сообщения из БД, проверять, не возникла ли какая-либо ошибка - если да, отправляем ошибку с кодом состояния ошибки; в противном случае добавляем полученные сообщения в наш объект ответа, устанавливаем сообщение как УСПЕХ и доставляем его конечному пользователю.
Теперь все, что нам нужно сделать, это интегрировать файлы в main. Теперь в главном файле должны быть следующие строки.
Запустите приложение с $ go run main.go
. Нажмите на URL http://localhost:8000/posts
. Он должен дать вам пустой объект Response с сообщением SUCCESS.
Проверьте базу данных, вы найдете таблицу с уже созданными сообщениями.
Еще не верите в магию?
Мы также замечаем, что в таблице есть дополнительные поля, чем мы рассчитывали. created_at
, updated_at
, deleted_at
и id
. Что случилось?
ГОРМ создает эти поля автоматически. id
для индексации и первичного ключа. _at
полей для аудита. Разве это не круто?
Теперь реализуем остальные операции.
GET: POST BY ID
Добавьте следующую функцию в services/service.go
файл
У нас есть дополнительный импорт strconv
и github.com/gorilla/mux
для анализа заданного параметра пути или идентификатора сообщения.
СОЗДАТЬ: ОПУБЛИКОВАТЬ
Добавьте следующую функцию в services/service.go
файл
ОБНОВЛЕНИЕ: POST BY ID
Добавьте следующую функцию в services/service.go
файл
Чувствовал себя мило! Возможно, УДАЛИТЬ позже
Добавьте следующую функцию в services/service.go
файл
В GORM есть функция Мягкое удаление. Это означает, что запись не удаляется из базы данных, а обновляется поле deleted_at
, и запись недоступна для использования. Если вам нужна запись снова, просто очистите поле deleted_at
записи в базе данных.
Если вам нужно полностью стереть запись из базы данных (жесткое УДАЛЕНИЕ), измените строку
err := dbconn.Delete(&post, params["id"]).Error
to
err := dbconn.Unscoped().Delete(&post, params["id"]).Error
Unscoped()
делает жесткое удаление записи.
Операции реализованы, осталось только сделать маршруты доступными. Измените файл routes/routes.go
следующим образом:
Готово! Протестируйте API в Postman
Мы создали Go-Backend с ORM для подключения к базе данных, и ни одного необработанного запроса в поле зрения! Ах! Ощущение чистого блаженства!
Полный код можно найти здесь
В GORM доступно больше API и операций. Ознакомьтесь с документацией здесь
Пока мы не встретимся снова! Быть безопасным! Код безопасен! Пока!!