【问题标题】:gorm invalid memory address or nil pointer dereferencegorm 无效的内存地址或 nil 指针取消引用
【发布时间】:2020-04-17 06:51:29
【问题描述】:

我是 golang 和 gorm 框架的新手。

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

db.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
}

users/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 变量以检查它是否具有正确的 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)
...

我的代码有问题吗?

谢谢。

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    堆栈跟踪引用文件controllers.go:18,您没有在此处包含该文件。

    db.goInit() 函数中存在问题。函数完成后,您将关闭与数据库的连接。此外,您似乎误解了 defer 关键字的行为,因为您在函数末尾使用它。

    【讨论】:

    • 你是对的。无论如何,我应该在哪里关闭数据库连接?没必要吗?
    • 关闭连接是个好习惯。在这里,您似乎想在应用退出时关闭连接。这里的解决方案是在应用程序入口点连接连接并推迟关闭连接。
    猜你喜欢
    • 2013-09-16
    • 2015-06-18
    • 2017-03-05
    • 2019-04-19
    • 2017-03-18
    • 2015-04-24
    • 2014-01-12
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多