首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Beego中使用gorm

如何在Beego中使用gorm
EN

Stack Overflow用户
提问于 2016-09-08 09:56:49
回答 2查看 1.9K关注 0票数 4

Beego ORM目前还不完全(例如,它不支持外键约束)。所以我决定在Beego中使用gorm。怎样做才是正确的方法呢?我看过来自gorm的示例代码:

代码语言:javascript
复制
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()
}

但是,在每个控制器函数中,我必须每次都连接到数据库吗?有没有办法使用像长轮询连接这样的东西?

EN

回答 2

Stack Overflow用户

发布于 2016-09-08 15:59:32

gorm在幕后使用嵌入在gorm.DB中的sql.DB类型

DB是一个数据库句柄,表示一个由零个或多个基础连接组成的池。它对于多个goroutine的并发使用是安全的。sql包自动创建和释放连接;它还维护一个空闲连接池。

因此,如果您希望使用事务在请求处理中实现一定程度隔离,则可以在代码中全局使用所获得的DB

代码语言:javascript
复制
tr:=db.Begin()
票数 3
EN

Stack Overflow用户

发布于 2017-02-12 01:07:34

因此,正如@Uvelichitel指出的那样,您的选择是在全局级别定义您的db连接,并从所需的位置使用它(可能是主函数,用于打开连接和模型层以查询结果)。

因此,基本上可以有一个包含数据库连接逻辑的文件:

代码语言:javascript
复制
// 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 (只需确保将此包导入到使用位置)。

代码语言:javascript
复制
import "appname/db"

func main() {
  conn, _ := db.Connect("host=localhost user=postgres ...")
  // db.Conn is initialized and ready for usage anywhere else

同样的结果可以在单个main.go文件中实现,将全局变量声明和连接逻辑直接移动到那里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39381459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档