亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

處理超過20條記錄時出現問題

處理超過20條記錄時出現問題

Go
臨摹微笑 2023-08-07 11:13:26
我正在使用該github.com/go-sql-driver/mysql庫與我的 MySQL 數據庫進行交互。一切正常,除非我的查詢超過 20 條記錄。查詢返回結果集很好,但是當我循環到第 21 條記錄時,它會出現恐慌。我以這種方式查詢我的數據庫:row, err = store.db.Query(myquerystring)我正在提取返回值,如下所示:indx = 0for row.Next() {    err = row.Scan(       &mySlice[indx].Val1, &mySlice[indx].Val2    )    if err != nil {        if err == sql.ErrNoRows {            log.Print("No records found")        } else {            log.Printf("Error retrieving data: %s", err.Error())        }    }     indx++}我得到的錯誤不是來自我的錯誤處理,它在檢索第 21 條記錄時立即發生。我將登錄作為 for 循環中的第一件事和最后一件事,我得到了第 20 條記錄末尾的日志,但沒有寫入第 21 條記錄的第一個日志,因此這似乎是導致恐慌的行for row.Next()。我得到的錯誤是:http: panic serving xxx.xxx.xxx.xxx:xxxxx: runtime error: invalid memory address or nil pointer dereference這就是我初始化切片的方式:**sqlstring 與上面的查詢相同,只是所有字段都從 select 中刪除并且僅count(tableid)返回 a 。row, err := store.db.Query(sqlString)row.Next()err = row.Scan(    &count,)var mySlice = make([]mystruct, count)
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

首先感謝您提出堆棧跟蹤請求,它使我能夠仔細分析堆棧跟蹤,從而找到解決方案。

有兩個問題。

我用于填充切片的函數還有另外 2 個函數,這些函數被調用以填充父結構中的結構,因為父結構中返回的記錄數量超出了填充父結構之前可用的最大連接數。在這些函數中顯式關閉行對象解決了此錯誤。

第二個是我有一個 for 循環,我從 1 循環到記錄計數,因為我想將 1 的值存儲到“X”而不是 0 到“X-1”,但這顯然導致索引超出范圍錯誤(菜鳥錯誤)。只需正常循環并將“X+1”存儲在變量中即可輕松解決此問題。

感謝所有的評論,他們幫助我找到了自己的問題,非常感謝。


查看完整回答
反對 回復 2023-08-07
  • 1 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號