gorm封装问题

`package models

import (
"github.com/astaxie/beego"
"github.com/jinzhu/gorm" "log" _ "github.com/go-sql-driver/mysql"

)

var db *gorm.DB

func Setup() {
beego.Info(`this is db setup`)
var err error
dbhost := beego.AppConfig.String("dbhost")
dbport := beego.AppConfig.String("dbport")
dbuser := beego.AppConfig.String("dbuser")
dbpassword := beego.AppConfig.String("dbpassword")
dbname := beego.AppConfig.String("dbname")

dsn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8&loc=Asia%2FShanghai"
db, err := gorm.Open("mysql", dsn)

if err != nil {

  log.Fatalf("models.Setup err: %v", err)  

}
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
}`

这里定义的db如何在其他model里使用?

阅读 3.1k
2 个回答

定义个全局的DBConn就行了吧

果然是变量作用域的问题

//此处例子全局变量值为20
var g int
func test(){
    a := 10
    b := 10
    //千万不要使用 g := a+b 这个是在 main 里面创建了一个新的局部变量 g
    g = a+b
    ...
}
//此处全局变量g1仍然为零值 0,而同名的局部变量 g1(:= 语法是定义一个新的变量且初始化) 为20
var g1 int
func test1(){
    a := 10
    b := 10
    g1 := a + b
}

在setup里的db := xxx是重新开辟了一个局部变量,而不是更改全局的,所以需要重新定义一个全局变量,然后将setup里的赋值给外部DB=db

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题