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

【go】gorm 使用问题

|
model
–model.go
main.go

// main.go
func main () {
gin.Run() // 启动web服务器
}
// model.go
var Db *gorm.DB
func init(){
Db , err := gorm.Open('mysql','DSN = root:[email protected]/hongjiu?charset=utf8&parseTime=True&loc=Local')
defer Db.Close() // 这里关了连接还怎么使用呢?
}

额,不要关,可以接收退出的信号关闭
上面的说错了,defer是函数级的。

不关就是了,我的所有连接都这样
什么memcache,mysql,rabbitmq
要活学活用

你应该把它写在main函数里。比如:

func init(){
//init用来执行初始化操作,比如db.AutoMigrate(),也可以不要
//此处的DB生命周期和init的周期相同,初始化玩db就被销毁。
openDB()
defer closeDB()
initDB()
}
func main(){
//每个打开的DB跟着main函数的生命周期
openDB()
defer closeDB()
MAIN()
}

虽然不关也没什么问题,不过能做的更好为什么不做呢?


实例:

package main
import(
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
var db *gorm.DB
func openDB() {
var err error
db, err = gorm.Open(dbType, dbAddress)
checkErrFatal(err)
}
func closeDB() {
db.Close()
}
func init(){
openDB()
defer closeDB()
log.Println("Init tables")
db.AutoMigrate(&User{})
}
func main(){
openDB()
defer closeDB()
query()
}
func query() int {
var count int = 0
db.Where("name = ?", user).Find(&users).Count(&count)
return count
}

你把defer db.Close()放到main函数里面就好了,只有main函数结束的时候才执行close方法

defer关键字在 golang 中用于延迟执行一个函数,不是立即执行的
会在你程序退出时执行

回答

本文地址:H5W3 » 【go】gorm 使用问题

评论 0

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