как импортировать соединение gorm db из другого файла или пакета - PullRequest
0 голосов
/ 08 июня 2018

Я учусь на ходу, и недавно я узнал, как использовать gorm для подключения к базе данных.Я не могу понять, как импортировать указанное соединение.Только открывать и откладывать это закрытие в области действия func main()

Что у меня есть на данный момент:

func main(){
  db, _ := gorm.Open("postgres", "host=localhost port=5432 user=someUser dbname=someDB password=somePW sslmode=disable")
  defer db.Close()
}

Это прекрасно работает, и я могу создавать таблицы и делать CRUD ... но всев основной функции.

Есть ли в любом случае я могу сделать что-то вроде этого (это не сработало) и использовать его в основном:

func db(){
  db, _ := gorm.Open("postgres", "host=localhost port=5432 user=someUser dbname=someDB password=somePW sslmode=disable")
  defer db.Close()
  return db
}

Или определить какой-то пакет, который также позволит мне сделатьthis.

Я знаю, что defer в основном просто закроет соединение, как только вернется db, но, надеюсь, вы, ребята, получите то, что я собираюсь.

1 Ответ

0 голосов
/ 08 июня 2018

Создайте пакет для хранения значения базы данных :

package db

import "github.com/jinzhu/gorm"

var DB *gorm.DB

func Open() error {
   var err error
   DB, err = gorm.Open("postgres", "host=localhost port=5432 user=someUser dbname=someDB password=somePW sslmode=disable")
   if err != nil {
       return err
   }
}

func Close() error {
  return DB.Close()
}

В main() откройте базу данных и закройте ее по возвращении:

package main

import (
    "import/path/of/package/db"
)

func main() {
    if err := db.Open(); err != nil {
       // handle error
    }
    defer db.Close()
    ... do stuff
}

Любой пакет может импортировать пакет db и обращаться к базе данных как db.DB.

package foo 

import (
    "import/path/of/package/db"
)

func doSomethignWithDB() {
   db.DB.Query("hello")
}

Другой подход заключается в использовании того, что у вас сейчас работает.Откройте базу данных в main и передайте ее нужным функциям:

import "github.com/jinzhu/gorm"

func main(){
  db, err := gorm.Open("postgres", "host=localhost port=5432 user=someUser dbname=someDB password=somePW sslmode=disable")
  if err != nil {
     // handle err
  }
  defer db.Close()
  doSomethingWithDB(db)
}

func doSomethingWithDB(db *gorm.DB) {
  ...
}
...