gorm 无效的内存地址或 nil 指针取消引用
gorm invalid memory address or nil pointer dereference
我是 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)
...
我的代码有问题吗?
谢谢。
堆栈跟踪引用文件 controllers.go:18
,您未在此处包含该文件。
db.go
在 Init()
函数中有问题。函数完成后,您将关闭与数据库的连接。此外,您似乎误解了 defer
关键字的行为,因为您在函数末尾使用它。
我是 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)
...
我的代码有问题吗?
谢谢。
堆栈跟踪引用文件 controllers.go:18
,您未在此处包含该文件。
db.go
在 Init()
函数中有问题。函数完成后,您将关闭与数据库的连接。此外,您似乎误解了 defer
关键字的行为,因为您在函数末尾使用它。