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

如何使用 gorm 解决“运行时错误:无效的内存地址或 nil 指针取消引用”

如何使用 gorm 解决“运行时错误:无效的内存地址或 nil 指针取消引用”

Go
白猪掌柜的 2023-07-26 17:11:01
我是 golang 新手,我想用它来制作一个 REST API。我正在阻止这个问题。我不明白它,因为函数 CreateEffect 运行良好。我的问题出在函数“getEffects”中:“db.Find(&effects)”这是我的代码:var db *gorm.DBvar err errorfunc getEffects (w http.ResponseWriter, r *http.Request) {    var effects []Effects    db.Find(&effects)    w.Header().Set("Content-Type", "application/json")    json.NewEncoder(w).Encode(&effects)}func main () {    db, err := gorm.Open("sqlite3", "gorm.db")    defer db.Close()    //Initialisation des routes    r:= mux.NewRouter()    r.HandleFunc("/effects", getEffects).Methods("GET")    //Start serveur port 5080    log.Fatal(http.ListenAndServe(":5080",r))}这是运行时错误:2019/09/28 22:46:54 http: panic serving 127.0.0.1:36488: runtime error: invalid memory address or nil pointer dereferencegoroutine 27 [running]:完整代码在这里: https: //pastebin.com/sbzhK8YV
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

当您编写 时db, err := gorm.Open("sqlite3", "gorm.db"),您本质上是在声明一个“新”局部变量,它隐藏了全局“db”。

因此,所使用的“db”变量db.Find(&effects)从未实际初始化。

为了给您提供更多背景信息,以防您开始使用 Go。这个运行时错误在逻辑上类似于C的分段错误,或者Java的空指针异常。如果您使用的是 IDE,请确保以某种方式配置它,使其显示警告(甚至错误)等声明。重新声明具有相同名称的变量几乎从来都不是一个好主意。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

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