gorm 无效内存地址或 nil 指针取消引用

我是 golang 和 gorm 框架的新手。


这是我使用 gorm 获取数据库的代码。


数据库Go


package db


import (

    "fmt"

    "github.com/jinzhu/gorm"

    _ "github.com/lib/pq"

    "github.com/teamhide/hfive_go/users"

    "log"

)


const (

    DbHost     = "localhost"

    DbPort     = "5432"

    DbUser     = "1"

    DbPassword = "1"

    DbName     = "1"

)


var db *gorm.DB

var err error


func Init() {

    db, err = gorm.Open(

        "postgres",

        fmt.Sprintf(

            "host=%s port=%s user=%s dbname=%s password=%s sslmode=disable",

            DbHost,

            DbPort,

            DbUser,

            DbName,

            DbPassword,

        ),

    )

    if err != nil {

        log.Fatal(err.Error())

    }

    db.AutoMigrate(&users.User{})

    defer db.Close()

}


func GetDB() *gorm.DB {

    return db

}

用户/usecase.go


package users


import (

    "fmt"


    "github.com/teamhide/gin_boilerplate/db"

)


type UserUsecase interface {

    RegisterUserUsecase(email, password1, password2 string) (bool, error)

}


func RegisterUserUsecase(email, password1, password2 string) (bool, error) {

    db := db.GetDB()

    fmt.Println(db)

    return true, nil

}

在用例中,如您所知,我只是打印了 db 变量来检查它是否具有正确的数据库数据。


但是当我执行它时,它会抛出错误。


...

runtime error: invalid memory address or nil pointer dereference

...

/Users/hide/go/src/github.com/teamhide/hfive_go/users/controllers.go:18 (0x15b3301)

        UserController.RegisterDefaultUser: uc.RegisterUserUsecase(form.Email, form.Password1, 

form.Password2)

...

我的代码有问题吗?


料青山看我应如是
浏览 115回答 1
1回答

明月笑刀无情

堆栈跟踪引用了controllers.go:18您未在此处包含的文件。功能有db.go问题Init()。函数完成后,您将关闭与数据库的连接。另外,您似乎误解了defer关键字的行为,因为您在函数末尾使用了它。
打开App,查看更多内容
随时随地看视频慕课网APP