Малоизвестный пакет Go, который пригодится при выполнении SQL-миграций



Книга Малоизвестный пакет Go, который пригодится при выполнении SQL-миграций

Не многие команды разработчиков знают о существовании пакета Go, который можно использовать для выполнения SQL-миграций.


В файле migration.go имеется следующий код:



Пакет, о котором идет речь, называется embed (более подробная информация в документации).


Пакет embed появился в Go 1.16. Он предоставляет возможность встраивать файлы и каталоги в бинарные файлы Go. В данном случае пакет embed используется для встраивания файлов миграции SQL в бинарный файл.


Директива //go:embed *.sql  —  это специальный комментарий, который указывает компилятору Go включить все файлы с расширением .sql во встроенную файловую систему. Доступ к встроенным файлам можно получить с помощью типа embed.FS.


Переменная FS  —  это глобальная переменная типа embed.FS, в которой хранится встроенная файловая система. Переменная FS может использоваться для доступа к встроенным файлам во время выполнения программы.



Обычно sql-файл создается вместе с пакетом миграций (migrations) в той же папке.


Использование пакета embed может упростить дистрибуцию и развертывание программы на языке Go, поскольку избавляет от необходимости распространять отдельные файлы вместе с бинарным файлом. Вместо этого все необходимые файлы могут быть включены в сам бинарный файл.


Как вызывать миграции?


Внутри файла main.go можно вызывать миграции с помощью функции MigrateDB. Пример:



Ниже показано, как определена функция:



Обратите внимание: в функции MigrateDB используется интерфейс fs.FS для обеспечения более универсального способа работы с файловыми системами, а embed.FS  —  для встраивания файлов и каталогов в бинарный файл Go.


Можно ли не использовать пакет embed?


Хотя для включения файлов в программу на языке Go можно использовать и другие методы, например чтение файлов с диска или включение их в виде активов в отдельный файл, пакет embed позволяет упростить этот процесс и облегчить управление программой и ее дистрибуцию.


Преимущества пакета embed


Упрощенная дистрибуция


Встраивание файлов миграции SQL в бинарный файл позволяет распространять один бинарный файл вместо бинарного файла и отдельных файлов SQL. Это упрощает процесс дистрибуции и облегчает развертывание приложения.


Повышение безопасности


Встраивание файлов миграции SQL в бинарный файл позволяет повысить уровень безопасности за счет снижения риска атак типа SQL-инъекций. Поскольку SQL-код компилируется в бинарный файл, злоумышленнику сложнее модифицировать SQL-код.


Оптимизация контроля версий


Включив файлы миграции SQL в проект Go, можно управлять ими с помощью средств контроля версий, таких как Git. Это поможет отслеживать изменения в файлах миграции и при необходимости откатывать изменения.


Упрощение тестирования


Встраивание файлов миграции SQL в бинарный файл может упростить тестирование приложения, поскольку не нужно беспокоиться о поиске SQL-файлов во время выполнения. Это упрощает процесс тестирования и облегчает написание автоматизированных тестов.



268   0  

Comments

    Ничего не найдено.