PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да се справя с отварянето/затварянето на Db връзка в Go приложение?

Отварянето на db връзка всеки път, когато е необходимо, е загуба на ресурси и е бавно.

Вместо това трябва да създадете sql.DB веднъж, когато вашето приложение стартира (или при първо поискване), или го предайте, където е необходимо (например като параметър на функция или чрез някакъв контекст), или просто го направете глобална променлива и така всеки може да има достъп до нея. Безопасно е да се обаждате от множество горпрограми.

Цитат от документа на sql.Open() :

Върнатият DB е безопасен за едновременна употреба от множество горутини и поддържа собствен пул от неактивни връзки. По този начин функцията Open трябва да бъде извикана само веднъж. Рядко се налага затваряне на БД.

Можете да използвате пакет init() функция, за да го инициализирате:

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
}

Едно нещо, което трябва да се отбележи тук е, че sql.Open() може да не създаде действителна връзка с вашата DB, може просто да потвърди аргументите си. За да проверите дали наистина можете да се свържете с db, използвайте DB.Ping() , напр.:

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal("DB unreachable:", err)
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Полиморфизъм в таблиците на SQL база данни?

  2. Как да форматирате числа в PostgreSQL

  3. Как мога да предотвратя Postgres да вмъква подзаявка?

  4. След възстановяване на моята база данни серийният номер е премахнат от колоната в Postgresql

  5. Логическа репликация на PostgreSQL