1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dana-go-database-sql-tutorial-translation

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
03.0.accessing.md 5.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.03.2025 18:11 571ab8e
layout title
article
Доступ к базе данных

Теперь, когда вы загрузили пакет драйвера, вы готовы создать объект базы данных, sql.DB.

Для создания sql.DB используется sql.Open(). Это возвращает *sql.DB:

func main() {
	db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()
}

На этом примере показано несколько вещей:

  1. Первый аргумент sql.Open — это имя драйвера. Это строка, которую драйвер использовал для регистрации себя с database/sql, и обычно совпадает с названием пакета, чтобы избежать путаницы.
  2. Второй аргумент представляет собой специфическую для драйвера синтаксическую конструкцию, которая сообщает драйверу, как ему следует получить доступ к подлежащему хранилищу данных. В данном примере мы подключаемся к базе данных "hello" внутри локального экземпляра сервера MySQL.
  3. Вы должны (почти всегда) проверять и обрабатывать ошибки, возвращённые всеми операциями database/sql. Есть некоторые особые случаи, где это не имеет смысла, и мы обсудим их позже.
  4. Идиоматично использовать defer db.Close(), если объект sql.DB не должен существовать за пределами области функции.

Несмотря на то, что это может показаться контрпродуктивным, sql.Open() не устанавливает никаких соединений с базой данных, ни также не проверяет параметры подключения драйвера. Вместо этого он просто подготовляет абстракцию базы данных для последующего использования. Первое реальное соединение с подлежащим хранилищем данных будет установлено лениво, при первом его использовании. Если вам нужно сразу проверить доступность и возможность подключения к базе данных (например, проверить наличие сети и вход в систему), используйте db.Ping() для этой цели, и не забудьте проверять ошибки:

err = db.Ping()
if err != nil {
    // выполните здесь какие-либо действия
}

Хотя идиоматично закрывать базу данных после завершения работы с ней, объект sql.DB предназначен для длительной жизни. Избегайте частого открытия и закрытия баз данных. Вместо этого создайте один объект sql.DB для каждого уникального хранилища данных, которое требуется подключиться, и сохраните его до тех пор, пока программа не закончит работу с этим хранилищем данных. Передавайте его там, где это необходимо, или делайте доступным глобально, но не закрывайте его. И не открывайте и не закрывайте базу данных из короткоживущей функции. Вместо этого передайте объект sql.DB в эту короткоживущую функцию в качестве аргумента.

Если вы не рассматриваете объект sql.DB как долгоживущий, вы можете столкнуться с проблемами, такими как плохое повторное использование и разделение соединений, исчерпание доступных сетевых ресурсов или случайные отказы из-за большого количества TCP-соединений, остающихся в состоянии TIME_WAIT. Такие проблемы указывают на то, что вы не используете database/sql таким образом, как было спроектировано.

Теперь самое время использовать ваш объект sql.DB.

Предыдущее: Импорт драйвера базы данных Следующее: Извлечение набора результатов

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dana-go-database-sql-tutorial-translation.git
git@api.gitlife.ru:oschina-mirror/dana-go-database-sql-tutorial-translation.git
oschina-mirror
dana-go-database-sql-tutorial-translation
dana-go-database-sql-tutorial-translation
master