gorm記憶體問題 runtime error: invalid memory address or nil pointer dereference
阿新 • • 發佈:2021-07-28
gorm記憶體問題報錯
問題背景
在db.go檔案中聲明瞭全域性變數,並在InitDB函式中初始化db
var db *gorm.DB func InitDB() { // mysql DbHost := "" DbPort := DbUser := "" DbPassword := "" DbName := "" DbCharset := "" dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", DbUser, DbPassword, DbHost, DbPort, DbName, DbCharset) db, err = gorm.Open(mysql.New(mysql.Config{DSN: dsn}), &gorm.Config{}) if err!=nil{ panic("failed to connect to database, err:"+err.Error()) }
該過程沒有報錯,但是在後續資料庫查詢時出現記憶體錯誤,runtime error: invalid memory address or nil pointer dereference
初步判斷是db指標出錯
錯誤原因
雖然聲明瞭全域性變數db,但是在InitDB函式中,由於使用推導等號:=
,InitDB函式中實際上生成了一個區域性變數db
因此全域性變數db並沒有被賦值
解決方法
解決方法很多,其中一個方法是宣告一個全域性變數err,然後在InitDB函式中使用=
建立db,這樣就不會產生區域性變數db,而是直接使用全域性變數db