how to import gorm db connection from another file or package

那年仲夏 提交于 2019-12-23 02:52:07

问题


I'm learning go and I've recently learned how to leverage gorm to connect to a database. I can't figure out how to import said connection. Only open and defer it's closing in the scope of the func main()

What I have currently:

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

This works fine and I can create tables and do CRUD ... but all in the main function.

Is there anyway I can do something like this(it didn't work) and use it in main:

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

Or define some kind of package that will also allow me to do this.

I know that defer will basically just close the connect once db returns, but hopefully you guys get what I'm going for.


回答1:


Create a package to hold the database value:

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()
}

In main(), open the database and close it on return:

package main

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

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

Any package can import the db package and access the database as db.DB.

package foo 

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

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

Another approach is to use what you currently have working. Open the database in main and pass it to the functions that need it:

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) {
  ...
}


来源:https://stackoverflow.com/questions/50751788/how-to-import-gorm-db-connection-from-another-file-or-package

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!