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()
}
На этом примере показано несколько вещей:
sql.Open
— это имя драйвера. Это строка, которую драйвер использовал для регистрации себя с database/sql
, и обычно совпадает с названием пакета, чтобы избежать путаницы.database/sql
. Есть некоторые особые случаи, где это не имеет смысла, и мы обсудим их позже.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 )