Доступ к реляционным базам данных

Используя Go, вы можете интегрировать в свои приложения широкий спектр баз данных и подходов к доступу к данным. В этом разделе описано, как использовать пакет database/sql стандартной библиотеки для доступа к реляционным базам данных.

Для введения в тему доступа к данным с помощью Go, пожалуйста, ознакомьтесь с Руководством: Доступ к реляционной базе данных.

Go также поддерживает и другие технологии доступа к данным, включая библиотеки ORM для более высокого уровня абстракции при работе с реляционными базами данных, а также нереляционные NoSQL хранилища данных.

  • Библиотеки объектно-реляционного отображения (ORM). Хотя пакет database/sql включает функции для реализации логики доступа к данным на более низком уровне, вы также можете использовать Go для доступа к хранилищам данных на более высоком уровне абстракции. Подробнее о двух популярных библиотеках объектно-реляционного отображения (ORM) для Go, см. GORM (справочник по пакету) и ent (справочник по пакету).
  • NoSQL хранилища данных. Сообщество Go разработало драйверы для большинства NoSQL хранилищ данных, включая MongoDB и Couchbase. Вы можете поискать на pkg.go.dev дополнительные варианты.

Поддерживаемые системы управления базами данных

Go поддерживает все наиболее распространенные системы управления реляционными базами данных, включая MySQL, Oracle, Postgres, SQL Server, SQLite и другие.

Полный список драйверов вы найдете на странице SQLDrivers.

Функции для выполнения запросов или изменения данных в базе

Пакет database/sql включает функции, специально предназначенные для типа выполняемой операции с базой данных. Например, хотя вы можете использовать Query или QueryRow для выполнения запросов, QueryRow предназначен для случая, когда вы ожидаете только одну строку, что позволяет избежать накладных расходов, связанных с возвратом sql.Rows, содержащего всего одну строку. Вы можете использовать функцию Exec для внесения изменений в базу данных с помощью SQL-выражений, таких как INSERT, UPDATE или DELETE.

Для получения дополнительной информации см. следующее:

Транзакции

С помощью sql.Tx можно написать код для выполнения операций с базой данных в транзакции. В транзакции можно выполнить несколько операций вместе и завершить их финальной операцией commit, чтобы применить все изменения за один атомарный шаг, или rollback, чтобы отменить их.

Для получения дополнительной информации о транзакциях см. Выполнение транзакций.

Отмена запросов

Можно использовать context.Context, если требуется возможность отмены операции с базой данных, например, когда закрывается соединение с клиентом или операция выполняется дольше, чем планировалось.

Для любой операции с базой данных можно использовать функцию пакета database/sql, которая принимает Context в качестве аргумента. Используя Context, можно указать таймаут или срок окончания для операции. Также можно использовать Context для распространения запроса на отмену через приложение до функции, выполняющей SQL-инструкцию, что гарантирует освобождение ресурсов, если они больше не требуются.

Для получения дополнительной информации см. Отмена выполняющихся операций.

Управляемая пул коннектов

Когда используется дескриптор базы данных sql.DB, вы подключаетесь с использованием встроенного пула соединений, который создает и освобождает соединения в соответствии с потребностями вашего кода. Дескриптор через sql.DB — наиболее распространенный способ доступа к базе данных в Go. Для получения дополнительной информации см. Открытие дескриптора базы данных.

Пакет database/sql управляет пулом соединений за вас. Однако, для более сложных потребностей можно установить свойства пула соединений, как описано в Установка свойств пула соединений.

Для операций, в которых требуется одно зарезервированное соединение, пакет database/sql предоставляет sql.Conn. Conn особенно полезен, когда использование транзакции с sql.Tx является плохим выбором.

Например, ваш код может потребоваться:

Для получения дополнительной информации см. Использование выделенных соединений.

GoRu.dev Golang на русском

На сайте представлена адаптированная под русский язык документация языка программирования Golang