Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpDbCn 202 of 280 menu
◀ ▶

Соединение с базой в Go

Соединение получают через пакет database/sql: первым идет имя зарегистрированного драйвера, вторым строка с путем к файлу. Вызов открытия сам по себе не проверяет, доступен ли файл и жив ли движок.

Проверку делают отдельной командой связи с базой. Если она вернула ошибку, дальше запросы не шлют. Закрытие соединения ставят в отложенный вызов, чтобы файл освободился и при обычном выходе, и при раннем возврате из функции.

Откроем shop.db и проверим связь:

package main import ( "database/sql" "fmt" "log" _ "modernc.org/sqlite" ) func main() { db, err := sql.Open("sqlite", "shop.db") if err != nil { log.Fatal(err) } defer db.Close() err = db.Ping() if err != nil { log.Fatal(err) } fmt.Println("ok") }

На экране "ok". Файл создастся, если его еще не было; отложенное закрытие сработает перед выходом из main.

Тот же каркас удобно копировать в каждый пример раздела: драйвер, открытие, отложенное закрытие и проверка связи перед первым запросом:

package main import ( "database/sql" "fmt" "log" "os" _ "modernc.org/sqlite" ) func openDB() (*sql.DB, error) { db, err := sql.Open("sqlite", "shop.db") if err != nil { return nil, err } err = db.Ping() if err != nil { db.Close() return nil, err } return db, nil } func main() { os.Remove("shop.db") db, err := openDB() if err != nil { log.Fatal(err) } defer db.Close() fmt.Println("ready") }

Дан фрагмент без проверки связи после открытия. Допишите проверку и отложенное закрытие, чтобы программа не работала с мертвым соединением.

Скажите, почему после успешного открытия все равно нужна проверка связи, хотя ошибки на этом шаге не было.

Дан следующий порядок строк в main: открытие, первый запрос, проверка связи, отложенное закрытие. Скажите, что в этом порядке стоит поправить.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить