在多文件项目中共享 gorm 数据库连接
在 gorm 中,如果多个文件需要共享同一个数据库连接,可以采用以下解决方法:
在单独的文件中创建一个包含模型结构的包,例如:
// models.go package models import "gorm.io/gorm" type user struct { id uint `gorm:"primarykey"` mobile string }
创建一个包含全局数据库连接变量的包,例如:
// globals.go package globals import "gorm.io/gorm" var db *gorm.db
在应用程序的主函数中,初始化数据库连接并将其存储在全局变量中。
// main.go package main import ( "fmt" "github.com/gin-gonic/gin" "gorm.io/driver/mysql" "gorm.io/gorm" "log" "github.com/example/myapp/globals" "github.com/example/myapp/models" ) 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("数据库连接错误") } globals.db = db r.get("/ping/:name", ping) r.run("127.0.0.1:8081") }
在需要访问数据库连接的其他文件中,导入 model 和全局变量包:
// user_controller.go package controllers import ( "fmt" "github.com/gin-gonic/gin" "github.com/example/myapp/globals" "github.com/example/myapp/models" ) func ping(c *gin.Context) { var user models.User globals.DB.First(&user) fmt.Println(user.ID) fmt.Println(user.Mobile) c.String(200, "Hello World"+c.Param("name")) }
通过遵循此方法,可以在多文件项目中方便地共享 gorm 数据库连接。