gpt4 book ai didi

go - 如何用gorm解决 "runtime error: invalid memory address or nil pointer dereference"

转载 作者:行者123 更新时间:2023-12-01 22:35:20 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to use global var across files in a package?

(3 个回答)


2年前关闭。




我是 golang 的新手,我想用它来制作一个休息 API。
我正在阻止这个问题。
我不明白,因为 CreateEffect 函数运行良好。

我的问题出在函数“getEffects”中:“db.Find(&effects)”

这是我的代码:

var db *gorm.DB
var err error

func 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 dereference
goroutine 27 [running]:

完整代码在这里: https://pastebin.com/sbzhK8YV

感谢帮助

最佳答案

当你写 db, err := gorm.Open("sqlite3", "gorm.db") ,您实际上是在声明一个"new"局部变量,它会影响全局“db”。

因此,db.Find(&effects) 中使用了“db”变量。从未真正初始化。

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

关于go - 如何用gorm解决 "runtime error: invalid memory address or nil pointer dereference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58150271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com