gorm 使用问题

发布于 2022-09-06 05:26:42 字数 311 浏览 18 评论 0

|
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:root@/hongjiu?charset=utf8&parseTime=True&loc=Local')
  defer Db.Close() // 这里关了连接还怎么使用呢?
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

心房的律动 2022-09-13 05:26:42

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

感情洁癖 2022-09-13 05:26:42

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

岁月苍老的讽刺 2022-09-13 05:26:42

你应该把它写在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
}

余罪 2022-09-13 05:26:42

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

梦中的蝴蝶 2022-09-13 05:26:42

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文