go中使用gin的小问题?

在写golang项目时发现,每次数据库都需要重复连接并获取到指定的表中,要怎么解决这种方法
image.png
image.png
以前写项目都是先配置数据库,当需要都某个类的时候就将参数传入,而gin好像做不到吧

阅读 1.9k
1 个回答

有没有可能 go 是支持的,你只需要单独整个 package 然后设置个全局变量,在main 包调用初始化之后,就可以在任意位置调用 数据库连接了。。。不知道我理解的对不对,你的问题描述不是很清楚。

package repository

import (
    "demo/pkg/logx"
    "fmt"
    "gorm.io/gorm/logger"

    "github.com/spf13/viper"
    "gorm.io/driver/postgres"

    "gorm.io/gorm"
)

var db *gorm.DB

// Init ...
func Init() {
    var err error
    dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai",
        viper.GetString("database.host"),
        viper.GetString("database.username"),
        viper.GetString("database.password"),
        viper.GetString("database.dbname"),
        viper.GetInt("database.port"),
    )

    db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
        Logger: logger.Default.LogMode(logger.Info),
    })
    if err != nil {
        logx.Error.Fatalf("open db error: %s", err.Error())
    }
    //migrate()
}

func migrate() {
    err := db.AutoMigrate()
    if err != nil {
        logx.Error.Fatalf("migrate error: %s", err.Error())
        return
    }
}

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