QOR示例恐慌

我正在尝试运行该程序此链接。然而,我运行它,它导致侧面的恐慌。由于我是语言新手,我不知道如何调试它。gormgo

该程序的迷你版本(没有fb,推特和其他登录界面)

package main

import (

    "net/http"

    "github.com/qor/auth"

    "github.com/qor/auth/auth_identity"

    "github.com/qor/auth/providers/password"

    "github.com/qor/session/manager"

    "github.com/jinzhu/gorm"

)


var (

    gormDB, _ = gorm.Open("sqlite3", "sample.db")

    Auth = auth.New(&auth.Config{

        DB: gormDB,

    })

)


func init() {

    // Migrate AuthIdentity model, AuthIdentity will be used to save auth info, like username/password, oauth token, you could change that.

    gormDB.AutoMigrate(&auth_identity.AuthIdentity{})


    // Register Auth providers

    // Allow use username/password

    Auth.RegisterProvider(password.New(&password.Config{}))

}


func main() {

    mux := http.NewServeMux()


    // Mount Auth to Router

    mux.Handle("/auth/", Auth.NewServeMux())

    http.ListenAndServe(":9000", manager.SessionManager.Middleware(mux))

}

我将我命名的文件放在一个文件夹中(是文件夹中唯一的文件),然后我运行以初始化项目并安装所需的包。然后我这样做,我得到以下内容:main.gomain.gogo mod init project_name && go mod tidygo run .


panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x6d0441]


我真的很迷茫,因为我不知道如何调试它。似乎是结构中的指针(我不知道如何更改)。顺便说一句,我正在使用.auth_identity.AuthIdentitygo version go1.16.5 linux/amd64


ABOUTYOU
浏览 90回答 3
3回答

慕尼黑的夜晚无繁华

这似乎不是在戈尔姆中正确打开 SQLite 数据库的方法。您缺少 SQLite 驱动程序的导入,而不是传递字符串“sqlite3”,而应该传递和指向 .sqlite.Open("sample.db")gorm.Config请参阅 https://gorm.io/docs/connecting_to_the_database.html#SQLiteimport (  "gorm.io/driver/sqlite"  "gorm.io/gorm")// github.com/mattn/go-sqlite3db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})

汪汪一只猫

func init在建立数据库连接之前执行,gorm 无法迁移,并且在此处引发恐慌。试试这个代码func main(){    gormDB, err = gorm.Open("sqlite3", "sample.db")    if err != nil {      log.Falal(err) // thrown, if database cannot be opened    }    // database connection is established, ready to perform migrations:    Auth = auth.New(&auth.Config{        DB: gormDB,    })    // Migrate AuthIdentity model, AuthIdentity will be used to save auth info, like username/password, oauth token, you could change that.    err = gormDB.AutoMigrate(&auth_identity.AuthIdentity{})    if err != nil {          log.Fatal(err) // do not forget to throw exception, if migration fails    }    // Register Auth providers    // Allow use username/password    Auth.RegisterProvider(password.New(&password.Config{}))    err = gormDB.AutoMigrate(&auth_identity.AuthIdentity{})    if err != nil {         log.Fatal(err) // do not forget to throw exception, if migration fails    }    // Register Auth providers    // Allow use username/password    Auth.RegisterProvider(password.New(&password.Config{}))    mux := http.NewServeMux()    // Mount Auth to Router    mux.Handle("/auth/", Auth.NewServeMux())    http.ListenAndServe(":9000", manager.SessionManager.Middleware(mux))}

潇湘沐

问题是没有开箱即用的支持。在教程中,他们忘记在导入中添加以下行:sqlite_ "github.com/jinzhu/gorm/dialects/sqlite"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go