V
V
Vadim Rublev2020-05-03 23:20:25
MySQL
Vadim Rublev, 2020-05-03 23:20:25

How to make a connection to the MySQL DBMS in a global variable?

How to make a connection to the "MySQL" DBMS in a global variable? In order not to connect to the database in each route / function, but simply to use one connection object.
Clearly, it's like this:
db, err := sql.Open("mysql", "login:[email protected]/nameDB") // Connected to the database.
if err != nil {
// _error_handler_
return
}
defer db.Close() // Deferred connection-db close.

Actually, the question is more about closing, it turns out ...

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander Melentyev, 2020-05-11
@asmelentyev

You can do this:
in a separate package, let it be database do the following:

package database

import (
  "fmt"
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/sqlite"
  "log"
  "os"
)

var db *gorm.DB // объявляем переменную для работы с БД

func init() {
  // при обращении к пакету database будет совершена попытка подключения к БД
  conn, err := gorm.Open("sqlite3", "database.db")
  if err != nil {
    log.Println(fmt.Sprintf("database error: %v", err))
  } else {
    log.Println("database connected")
  }
  // записываем результат соединения в ранее объявленную переменную
  db = conn
}

// Создаем глобальную функцию с результатом соединения, чтоб можно было работать с БД из любого пакета
func Connector() *gorm.DB {
  return db
}

Next, in main.go, write the following:
package main

import (
  "go-tmp/project/database"
  "log"
)

func main() {
  // объявляем анонимную функцию, которая закроет соединения с БД при завершении работы приложения
  defer func() {
    if err := database.Connector().Close(); err != nil {
      log.Println(err)
    }
  }()
}

There is nowhere better :)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question