如何从另一个文件或包中导入gorm db连接 [英] how to import gorm db connection from another file or package

查看:68
本文介绍了如何从另一个文件或包中导入gorm db连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习go,最近又学习了如何利用gorm连接到数据库.我不知道如何导入所说的连接.仅在 func main()

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

我目前所拥有的:

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

这工作正常,我可以创建表并执行CRUD ...,但是所有操作都在main函数中.

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

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

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.

我知道db返回后,延迟基本上只会关闭连接,但是希望你们能得到我想要的.

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

推荐答案

创建一个包来保存

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

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
}

任何软件包都可以导入db软件包并以 db.DB 的身份访问数据库.

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

另一种方法是使用您当前的工作.在main中打开数据库,并将其传递给需要它的函数:

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

这篇关于如何从另一个文件或包中导入gorm db连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆