我是 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,請確保以某種方式配置它,使其顯示警告(甚至錯誤)等聲明。重新聲明具有相同名稱的變量幾乎從來都不是一個好主意。
- 1 回答
- 0 關注
- 217 瀏覽
添加回答
舉報
0/150
提交
取消