H5W3
当前位置:H5W3 > go > 正文

【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

回答

本文地址:H5W3 » 【go】gorm封装问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址