无法使用 GORM 迁移表

问题描述 投票:0回答:1

我在 superbase.com 创建了一个 Postgres 数据库,并想使用 GORM 将其连接到我的 Golang 项目。但是当我尝试迁移表时,它会抛出错误。

#database.go


    package initializers
    
    import (
        "fmt"
        "log"
        "os"
    
        "gorm.io/driver/postgres"
        "gorm.io/gorm"
    )
    
    var DB *gorm.DB
    
    func ConnectToDB() {
        var err error
    
        dsn := os.Getenv("DB_URL")
    
        DB, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    
        if err != nil {
            log.Fatal(DB, "Failed to connect to database")
        } else {
    
            fmt.Println(DB, "Database connection established successfully")
        }
    
    }

#migrate.go


    package main
    
    import (
        "GinGorm/initializers"
        "GinGorm/models"
    )
    
    func init() {
        initializers.LoadEnvVariables()
        initializers.ConnectToDB()
    }
    
    func main() {
        post := &models.Post{}
        initializers.DB.Debug().AutoMigrate(post)
    
    }

命令抛出错误:go run migrate/migrate.go

&{0xc0001ce480 0 0xc00005f6c0 1} 数据库连接已建立 成功恐慌:运行时错误:内存地址无效或为零 指针取消引用 [信号 0xc0000005 code=0x0 addr=0x28 pc=0xc19372]

goroutine 1 [运行]: gorm.io/gorm.(*DB).getInstance(0x70?) C:/Users/harsh/go/pkg/mod/gorm.io/[电子邮件受保护]/gorm.go:406 +0x12 gorm.io/gorm.(*DB).Debug(0x0) C:/Users/harsh/go/pkg/mod/gorm.io/[电子邮件受保护]/gorm.go:329 +0x18 main.main() D:/Code/Go/gin/GinGorm/migrate/migrate.go:15 +0x2e 退出状态 2

go go-gorm
1个回答
0
投票

失败在于

Debug
调用
initializers.DB
无效。它从未被初始化。

问题就在这里...

    DB, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})

DB, err :=
声明局部
DB
err
变量。这个本地
DB
掩盖了你的全局
var DB *gorm.DB

相反,只声明

err
并使用
=

    var err error
    DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
© www.soinside.com 2019 - 2024. All rights reserved.