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

And*_*Kim 2 go go-gorm

我正在学习 go,最近我学会了如何利用 gorm 连接到数据库。我不知道如何导入所述连接。只在范围内打开和推迟它的关闭func main()

我目前拥有的:

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

这工作正常,我可以创建表并执行 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
}
Run Code Online (Sandbox Code Playgroud)

或者定义某种包,也将允许我这样做。

我知道 defer 基本上只会在 db 返回后关闭连接,但希望你们能明白我的意思。

Cer*_*món 6

创建一个包来保存数据库值

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()
}
Run Code Online (Sandbox Code Playgroud)

在 中main(),打开数据库并在返回时关闭它:

package main

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

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

任何包都可以导入 db 包并以db.DB.

package foo 

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

func doSomethignWithDB() {
   db.DB.Query("hello")
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用您当前的工作。在 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) {
  ...
}
Run Code Online (Sandbox Code Playgroud)