Базы данных SQL хранят наборы данных в строках и столбцах. Вы можете извлекать и обновлять данные в системе управления реляционными базами данных (RDBMS) с помощью языка SQL. Из многих доступных баз данных SQL наиболее популярными являются MySQL, PostgreSQL, Microsoft SQL Server и SQLite.
Функционал для взаимодействия с базами данных в Go находится в пакете database/sql, входящем в стандартную библиотеку.
Пакет database/sql взаимодействует с базами данных SQL с помощью драйверов. Вы можете импортировать соответствующий пакет драйверов для своей СУБД и использовать его для взаимодействия с базой данных.
Начало работы с базами данных SQL в Go
Пакет database/sql представляет собой общий интерфейс для реляционных баз данных. Для работы с определенным сервером базы данных вам потребуется использовать один из множества доступных драйверов.
К счастью, вам не нужно беспокоиться о конкретных реализациях помимо драйвера. Пакет database/sql обрабатывает операции базы данных независимо от сервера, к которому вы подключаетесь.
Некоторые из самых популярных драйверов базы данных Go:
- Драйвер Go-SQL (Майскл)
- PQ (Постгрес SQL)
- Go-SQLite3 (SQLite)
- БД MSSQL (Майкрософт SQL сервер)
Вы можете использовать Список драйверов LibHunt найти эквиваленты для другие типы баз данных. Список также показывает относительную популярность каждой системы баз данных:
Установка и импорт драйверов базы данных Go
После того, как вы создали рабочее пространство Go и инициализировали файл модулей Go, установите драйвер, соответствующий вашей системе баз данных. Например, запустите одну из следующих команд в каталоге рабочей области, чтобы установить драйвер MySQL или SQLite:
получить -u github.com/go-sql-driver/mysql
зайди на github.com/mattn/go-sqlite3
После установки драйвера импортируйте его для побочных эффектов, добавив префикс подчеркивания перед пакетом. Например, чтобы импортировать драйвер MySQL вместе с пакетом database/sql:
импорт (
"база данных/sql"
_ "github.com/идти-sql-драйвер/mysql"
)
Импортируя пакет драйвера для побочных эффектов, вы можете использовать его для подключения к базе данных и выполнения операций с ней.
Подключение к базе данных SQL с помощью Go
После импорта драйверов базы данных вы можете создать подключение к базе данных с помощью Открытым метод база данных/sql упаковка. Этот метод принимает имя драйвера и путь к базе данных (для SQLite) или строку подключения (для MySQL). Например, используйте одно из следующих действий:
БД, ошибка := sql. Открыть ("sqlite3", "модели/testdb.db") // SQLite
БД, ошибка := sql. Открыть("mysql", "пользователь: пароль@/имя БД") // MySQL
После того, как вы попытаетесь открыть соединение, не забудьте проверить наличие ошибки:
если ошибся != ноль {
журнал. Fatalln (ошибка)
}
В зависимости от вашей системы баз данных, Открытым метод может вернуть ошибку, если база данных не существует. После подключения к базе данных вы можете выполнять запросы и готовить операторы, используя экземпляр базы данных, который Открытым возвращается.
Выполнение команд SQL
Вы можете выполнять SQL-команды с использованием Подготовить метод вашего экземпляра базы данных. Подготовить метод принимает команду SQL и возвращает подготовленный оператор для выполнения вместе с объектом ошибки. Например, если вы хотите создать новую таблицу:
команда, ошибка := БД. Prepare("СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ логин (имя пользователя ТЕКСТ, пароль ТЕКСТ)")
Оператор выше создает таблицу с именем авторизоваться, если он еще не существует. В новой таблице есть поля с именами имя пользователя а также пароль, каждый типа ТЕКСТ.
Если вы вставляете значения из своей программы в свои запросы, вы можете использовать нотацию вопросительного знака (?) для обозначения заполнителей, а затем передавать параметры при выполнении инструкции.
команда, ошибка := БД. Prepare("ВСТАВИТЬ В логин (имя пользователя, пароль) значения(?,?)")
После того, как вы создали подготовленный оператор, вы можете выполнить его, используя его Исполнитель метод. Этот метод позволяет передавать значения параметров из вашей программы:
exec, ошибка := команда. Exec (значение1, значение2)
если ошибся != ноль {
возвращаться
}
Первое значение, которое Исполнитель() возвращает результат SQL-запроса к вашей базе данных. Используя этот результат запроса, вы можете проверить количество затронутых строк или последний вставленный идентификатор:
затронуто, ошибка := exec. Затронутые строки ()
если ошибся != ноль {
возвращаться
}ФМТ. Println (затронуто)
id, ошибка := exec. LastInsertId()
если ошибся != ноль {
возвращаться
}
ФМТ. Println (идентификатор)
Получение результатов запроса
Пакет database/sql позволяет запрашивать результаты базы данных, используя Запрос метод экземпляра базы данных:
строки, ошибка := БД. Запрос("ВЫБЕРИТЕ * ОТ Пользователя")
если ошибся != ноль {
возвращаться
}
Запрос метод возвращает Ряды структуру, которую вы можете использовать для работы с вашим набором результатов. Например, вы можете использовать Следующий метод вашего экземпляра строк, чтобы перебирать его и работать с отдельными строками:
вар имя пользователя Пароль нить
за ряды. Следующий() {
ошибка := строки. Сканировать(&имя пользователя, &пароль)если ошибся != ноль {
журнал. Fatalln (ошибка)
}
ФМТ. Println (имя пользователя, пароль)
}
В приведенном выше примере две строковые переменные —имя пользователя а также пароль— представляет значение каждого столбца. Сканировать метод декодирует текущую строку в соответствующие переменные.
Базы данных SQL всегда пригодятся
Использование баз данных в Go очень просто с помощью пакета database/sql. Вы можете легко использовать его для запроса и выполнения команд SQL в Go.
Базы данных SQL лежат в основе многих приложений, особенно тех, которые работают с большими или сложными наборами данных. Вы можете использовать базы данных, такие как база данных SQLite в памяти, для своих простых проектов, таких как просмотр веб-страниц и создание ботов.
Надлежащее знание SQL и систем управления базами данных необходимо для их эффективного использования в ваших программах. Однако, если вы решите не изучать SQL, вы можете научиться использовать ORM для взаимодействия с базами данных SQL в Go.