【go】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里使用?

定义个全局的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

回答

以上是 【go】gorm封装问题 的全部内容, 来源链接: www.h5w3.com/114023.html

回到顶部