首页 文章

如何从另一个文件或包导入gorm db连接

提问于
浏览
1

我__701544_最近学会了如何利用gorm连接到数据库 . 我可以't figure out how to import said connection. Only open and defer it'在 func main() 范围内收盘

我目前有什么:

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

这工作正常,我可以创建表并做CRUD ...但所有在主函数 .

无论如何我可以做这样的事情(它不起作用)并在main中使用它:

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

或者定义某种类型的包,这也允许我这样做 .

我知道推迟将基本上只是在db返回后关闭连接,但希望你们得到我想要的东西 .

1 回答

  • 2

    创建一个包来保存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()
    }
    

    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 的形式访问数据库 .

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

相关问题