Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 41(211)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6, скачать журнал часть 7

Библиографическое описание:
Берьянов М.С. РАБОТА С БАЗОЙ ДАННЫХ MySQL В ЯЗЫКЕ Go // Студенческий: электрон. научн. журн. 2022. № 41(211). URL: https://sibac.info/journal/student/211/274604 (дата обращения: 25.11.2024).

РАБОТА С БАЗОЙ ДАННЫХ MySQL В ЯЗЫКЕ Go

Берьянов Максим Сергеевич

студент, факультет ПИиКТ, Университет ИТМО,

РФ, г. Санкт-Петербург

INTERACTION WITH MySQL DATABASE IN Go LANGUAGE

 

Maxim Beryanov

student, PIKT faculty, ITMO University,

Russia, Saint-Petersburg

 

АННОТАЦИЯ

Для работы с реляционными базами данных в языке Go применяется встроенный пакет database/sql. Однако он не используется сам по себе – он лишь предоставляет универсальный интерфейс для работы с базами данных. Для связывания с конкретной СУБД нам также необходим драйвер. В данной статье предлагается разобрать принцип взаимодействия с СУБД MySQL в приложении, написанном на языке Go.

ABSTRACT

To interact with relational databases, Go uses the built-in database/sql package. However, it is not used by itself - it only provides a universal interface for working with databases. To bind to a specific DBMS, we also need a driver. This article proposes to analyze principles of interaction with MySQL DBMS in application written in Go language.

 

Ключевые слова: база данных, SQL, Go, Docker.

Keywords: database, SQL, Go, Docker.

 

Для развертывания базы данных мы будем использовать Docker-контейнеры – в стандартном репозитории DockerHub содержится образ базы данных MySQL [1] под названием mysql. Для его использования необходимо скачать данный образ последней версии (с тегом latest) с помощью специальной команды в терминале (Docker Daemon должен быть активен), но можно также использовать и какую-либо специфическую версию: ‘docker pull mysql:latest’. После завершения скачивания мы можем увидеть только что загруженный образ, используя следующую команду: ‘docker image ls -a’. Далее нам нужно создать каталог в системе локальной машины, на которой запущен Docker, за пределами контейнера, а затем смонтировать этот каталог в директорию, которая находится внутри контейнера. Мы можем сделать это, используя тома (volumes) – это упрощает доступ приложений и других служб к файлам MySQL. Также, при запуске контейнера mysql необходимо настроить переадресацию портов с нашей локальной машины на желаемый контейнер. Происходит это с помощью следующей команды: ‘docker run -p 3306:3306 --name mysql-article-database -v /path/to/sql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest’.

Теперь, когда мы добились определенного прогресса при запуске базы данных, создадим проект приложения на Go [2] и загрузим драйвер ‘go-sql’. Это самый популярный драйвер базы данных MySQL с достаточно хорошей поддержкой сообщества – мы можем использовать эту зависимость, не опасаясь уязвимостей в безопасности: ‘go mod init mysql-go-article’, ‘go get -u github.com/go-sql-driver/mysql’. Создадим файл main.go, и поместим туда код из рисунка 1.

 

Рисунок 1. Взаимодействие с базой данных

 

В настоящее время у нас есть подключение к чистому (пустому) экземпляру Docker-контейнера [3] ‘mysql’ без какой-либо базы данных внутри него. Итак, создадим базу с помощью SQL-запроса вида ‘create database if not exists’ с именем ‘football’ благодаря передаче его как параметра функции Exec() сущности sql.DB, отвечающей за соединение с базой. В этом и дальнейших подобных случаях после исполнения запроса нужно проверять, не завершился ли он с ошибкой – в таком случае переменная ошибки err будет непустой. Аналогично, создадим таблицу с помощью SQL-запроса вида ‘create table if not exists’ с передачей базы данных ‘football’, которую мы создали на прошлом шаге – данная таблица будет содержать 4 поля (идентификатор, имя, фамилия и команда игрока). Основные поля таблицы, которые мы будем использовать представляют собой текстовые данные (varchar). Перейдем к самому интересному – внесем в нашу базы данных определенные данные по игроку, для этого создадим SQL-запрос вида ‘insert into’ с упоминанием таблицы и ее метаданных, в которую мы хотим поместить новое значение – таким образом, мы получим параметризованную сущность утверждения, в которую необходимо внести значения, а затем вызвать знакомый метод Exec(), а после этого закрыть созданную только что транзакцию [4] с помощью метода Close() вместе с успешным завершением вставки данных. Далее, необходимо проверить, появились ли наши данные в таблице ‘football.player’ – построим SQL-запрос на получение данных ‘select * from’ с упоминанием данной таблицы. После этого получим итератор по результирующему списку, который будем перебирать через цикл for-each, помещая найденные данные в переменную типа Player через метод Scan() по ссылке, а также выводя данные на экран (в консоль). По окончании работы необходимо закрыть соединение с базой данных.

Подводя итог вышесказанному, можно сказать, что мы успешно настроили взаимодействие с базой данных через приложение на языке Go – был развернут контейнер с СУБД MySQL, произошло подключение к нему вместе с созданием базы данных и таблицы в ней, а также выполнена вставка и запрос данных императивным образом с предварительным написанием SQL-запросов.

 

Список литературы:

  1. MySQL [Электронный ресурс] URL: https://mysql.com (дата обращения: 16.12.2022).
  2. Go [Электронный ресурс] URL: https://go.dev (дата обращения: 16.12.2022).
  3. Docker [Электронный ресурс] URL: https://docker.com (дата обращения: 16.12.2022).
  4. Введение в базы данных [Электронный ресурс] URL: https://habr.com/ru/post/686816/ (дата обращения: 16.12.2022).

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.