我正在学习,我最近学会了如何利用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
}
或者定义一些允许我这样做的包。
我知道,一旦db返回,defer基本上只会关闭连接,但希望你们得到我想要的东西。
答案 0 :(得分: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.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) {
...
}