【问题标题】:how to import gorm db connection from another file or package如何从另一个文件或包导入gorm db连接
【发布时间】:2018-06-08 00:23:25
【问题描述】:

我正在学习 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()
}

这很好用,我可以创建表并执行 CRUD ......但所有这些都在 main 函数中。

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

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

或者定义一些也可以让我这样做的包。

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

【问题讨论】:

  • dataBase := db() 是这样的吗?编译器不喜欢这样
  • 是的,有道理,所以数据库的实例不能导入到其他文件中?
  • 在这种情况下,参数的类型是什么?

标签: go go-gorm


【解决方案1】:

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

【讨论】:

  • 两者都有意义,不幸的是我需要 .Open() 的返回数据类型。我浏览了文档,找不到任何关于它的信息。看源码func Open(dialect string, args ...interface{}) (db *DB, err error)好像*DB是类型?
  • 但是,它本身不起作用,因为类型不是在本地定义的
  • github.com/jinzhu/gorm你是一个了不起的人,我只希望你有幸运的事情
  • 作为一个 Go 开发者,哪个是更好的选择?
猜你喜欢
  • 2013-01-18
  • 2018-10-30
  • 1970-01-01
  • 2020-02-24
  • 2013-02-08
  • 2019-08-21
  • 2015-02-02
  • 2021-03-21
  • 1970-01-01
相关资源
最近更新 更多