gorm的问题,为了全局使用db,我定义了全局变量,如果分成多个文件,db对象如何获取?

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "log"
)

var db *gorm.DB
var err error

func main() {
    r := gin.Default()
    dsn := "root:Nexon8888@tcp(127.0.0.1:3306)/iapplus?charset=utf8mb4&parseTime=True&loc=Local"
    db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err!=nil {
        log.Fatal("数据库连接错误")
    }
    r.GET("/ping/:name", ping)
    r.Run("127.0.0.1:8081") // listen and serve on 0.0.0.0:8080
}

func ping(c *gin.Context) {
    //c.JSON(200, gin.H{
    //    "message": "pong",
    //})
    var user UserModel
    db.First(&user)
    fmt.Println(user.ID)
    fmt.Println(user.Mobile)
    c.String(200, "Hello World"+c.Param("name"))
}
阅读 9.7k
2 个回答

定义一个model 包,或者 const 的包

image.png

然后在 main 里面导入这个 model

初始化链接上数据库后,就可以
model.DB = db

然后其他包只需要引入 model , 再 model.DB 就可以愉快的使用了

image.png

image.png

如果是在main包中使用多个文件,编译时应该使用go build .编译当前目录而不是指定文件编译。

比如目录如下:

.
├── config.go
├── const.go
└── main.go

则应该使用 go build .编译当前目录。


如果是分多个包,比如楼上说的创建一个model包。则导出全局DB变量即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题