1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
您省略的實(shí)際錯(cuò)誤消息就在恐慌堆棧跟蹤之前:
http: panic serving [::1]:53017: runtime error: invalid memory address or nil pointer dereference
這是一些指針尚未設(shè)置且等于 的提示nil。
當(dāng)深入挖掘時(shí),我發(fā)現(xiàn)當(dāng)請(qǐng)求到達(dá)您的方法時(shí),它repo.db沒有設(shè)置( ) ,這就是它恐慌的原因。== nilGetBalancerepo.db.Where
您嘗試在main.go文件中設(shè)置此字段,您還可以在其中加載數(shù)據(jù)庫(kù):
var db *gorm.DB
{
dbDriver := "sqlite3"
dbName := "demo.db"
db, err := gorm.Open(dbDriver, dbName)
if err != nil {
_ = level.Error(logger).Log("exit", err)
os.Exit(-1)
}
db.AutoMigrate(&Entity.UserEntity{})
}
這段代碼包含一個(gè)微妙的錯(cuò)誤,它與變量陰影有關(guān)?;旧?,您db上面聲明的變量與括號(hào)中聲明的變量不同,{}括號(hào)中的變量是一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)。您可以通過重命名或不再聲明它來解決這個(gè)問題(使用:=):
var db *gorm.DB
{
dbDriver := "sqlite3"
dbName := "demo.db"
dbLoaded, err := gorm.Open(dbDriver, dbName) // Rename the variable
if err != nil {
_ = level.Error(logger).Log("exit", err)
os.Exit(-1)
}
dbLoaded.AutoMigrate(&Entity.UserEntity{})
db = dbLoaded // Set `db` of the outer scope to `dbLoaded` of this scope
} // dbLoaded is lost here, but it can be accessed using `db`
現(xiàn)在它正確加載了數(shù)據(jù)庫(kù)(db不再是nil),并且您的其他模塊中的訪問現(xiàn)在也可以正常工作。
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報(bào)