Beego ORM目前还不完全(例如,它不支持外键约束)。所以我决定在Beego中使用gorm。怎样做才是正确的方法呢?我看过来自gorm的示例代码:
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)
func main() {
db, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmode=disable password=mypassword")
defer db.Close()
}但是,在每个控制器函数中,我必须每次都连接到数据库吗?有没有办法使用像长轮询连接这样的东西?
发布于 2016-09-08 15:59:32
gorm在幕后使用嵌入在gorm.DB中的sql.DB类型
DB是一个数据库句柄,表示一个由零个或多个基础连接组成的池。它对于多个goroutine的并发使用是安全的。sql包自动创建和释放连接;它还维护一个空闲连接池。
因此,如果您希望使用事务在请求处理中实现一定程度隔离,则可以在代码中全局使用所获得的DB
tr:=db.Begin()发布于 2017-02-12 01:07:34
因此,正如@Uvelichitel指出的那样,您的选择是在全局级别定义您的db连接,并从所需的位置使用它(可能是主函数,用于打开连接和模型层以查询结果)。
因此,基本上可以有一个包含数据库连接逻辑的文件:
// appname/conn.go
package db
import (
"github.com/jinzhu/gorm"
...
)
var (
// this one gonna contain an open connection
// make sure to call Connect() before using it
Conn *gorm.DB
)
func Connect(dbConnString string) (*gorm.DB, error) {
db, err := gorm.Open("postgres", dbConnString)
Conn = db
return db, err
}从main.go调用db.Connect之后,您可以从应用程序的任何位置自由使用打开的连接db.Conn (只需确保将此包导入到使用位置)。
import "appname/db"
func main() {
conn, _ := db.Connect("host=localhost user=postgres ...")
// db.Conn is initialized and ready for usage anywhere else同样的结果可以在单个main.go文件中实现,将全局变量声明和连接逻辑直接移动到那里。
https://stackoverflow.com/questions/39381459
复制相似问题