Перейти с 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 и операций. Ознакомьтесь с документацией здесь

Пока мы не встретимся снова! Быть безопасным! Код безопасен! Пока!!