为了账号安全,请及时绑定邮箱和手机立即绑定

QOR示例恐慌

QOR示例恐慌

Go
ABOUTYOU 2022-09-12 20:26:19
我正在尝试运行该程序此链接。然而,我运行它,它导致侧面的恐慌。由于我是语言新手,我不知道如何调试它。gormgo该程序的迷你版本(没有fb,推特和其他登录界面)package mainimport (    "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
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

这似乎不是在戈尔姆中正确打开 SQLite 数据库的方法。


您缺少 SQLite 驱动程序的导入,而不是传递字符串“sqlite3”,而应该传递和指向 .sqlite.Open("sample.db")gorm.Config


请参阅 https://gorm.io/docs/connecting_to_the_database.html#SQLite


import (

  "gorm.io/driver/sqlite"

  "gorm.io/gorm"

)


// github.com/mattn/go-sqlite3

db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})


查看完整回答
反对 回复 2022-09-12
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

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))


}


查看完整回答
反对 回复 2022-09-12
?
潇湘沐

TA贡献1816条经验 获得超6个赞

问题是没有开箱即用的支持。在教程中,他们忘记在导入中添加以下行:sqlite

_ "github.com/jinzhu/gorm/dialects/sqlite"


查看完整回答
反对 回复 2022-09-12
  • 3 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信