【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 中用于延迟执行一个函数,不是立即执行的
会在你程序退出时执行

回答

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

回到顶部