要判斷是 sql.errnorows 錯(cuò)誤,應(yīng)直接比較 err == sql.errnorows 或使用 errors.is;1. 在 queryrow 調(diào)用 scan 時(shí)返回 sql.errnorows 表示未找到記錄;2. 使用 query 或 querycontext 時(shí)不會(huì)觸發(fā) sql.errnorows,需手動(dòng)檢查結(jié)果集是否為空;3. 建議封裝數(shù)據(jù)庫(kù)操作統(tǒng)一處理該錯(cuò)誤,并避免將其視為嚴(yán)重問(wèn)題。
在 Go 語(yǔ)言中處理數(shù)據(jù)庫(kù)操作錯(cuò)誤時(shí),很多開(kāi)發(fā)者容易忽略一些特殊情況,比如
sql.ErrNoRows
下面是一些實(shí)用的建議,幫助你更好地識(shí)別和處理這類(lèi)特殊錯(cuò)誤。
在使用
*sql.Row
Scan
sql.ErrNoRows
立即學(xué)習(xí)“go語(yǔ)言免費(fèi)學(xué)習(xí)筆記(深入)”;
var user User err := db.QueryRow("SELECT name FROM users WHERE id = ?", id).Scan(&user) if err != nil { if err == sql.ErrNoRows { // 處理沒(méi)有找到記錄的情況 } else { // 處理其他數(shù)據(jù)庫(kù)錯(cuò)誤 } }
需要注意的是:只有在使用
QueryRow
Scan
sql.ErrNoRows
Query
字節(jié)跳動(dòng)推出的中英文AI寫(xiě)作、語(yǔ)法糾錯(cuò)、智能潤(rùn)色工具,是一款集成創(chuàng)作、潤(rùn)色、糾錯(cuò)、改寫(xiě)、翻譯等能力的中英文 AI 寫(xiě)作助手。
當(dāng)你使用
Query
QueryContext
sql.ErrNoRows
rows, err := db.Query("SELECT name FROM users WHERE role = ?", role) if err != nil { // 處理數(shù)據(jù)庫(kù)錯(cuò)誤 } defer rows.Close() var names []string for rows.Next() { var name string if err := rows.Scan(&name); err != nil { // 處理掃描錯(cuò)誤 } names = append(names, name) } // 檢查是否沒(méi)有任何結(jié)果 if len(names) == 0 { // 可以自定義一個(gè) not found 錯(cuò)誤或直接處理邏輯 }
這種情況下,沒(méi)有數(shù)據(jù)只是業(yè)務(wù)邏輯上的“空”,不是錯(cuò)誤狀態(tài),所以不會(huì)拋出
sql.ErrNoRows
不要把所有數(shù)據(jù)庫(kù)錯(cuò)誤都當(dāng)作嚴(yán)重問(wèn)題
例如
sql.ErrNoRows
避免重復(fù)判斷錯(cuò)誤類(lèi)型
如果你封裝了數(shù)據(jù)庫(kù)操作函數(shù),可以統(tǒng)一處理
sql.ErrNoRows
使用 errors.Is 更安全地判斷錯(cuò)誤類(lèi)型
雖然可以直接用
==
sql.ErrNoRows
errors.Is
if errors.Is(err, sql.ErrNoRows) { // 處理未找到記錄的情況 }
適當(dāng)封裝查詢邏輯
對(duì)于常用查詢操作,可以封裝成函數(shù),并返回是否找到結(jié)果的布爾值,這樣上層邏輯更容易處理。
基本上就這些。Go 中的數(shù)據(jù)庫(kù)錯(cuò)誤處理看似簡(jiǎn)單,但稍不注意就會(huì)漏掉像
sql.ErrNoRows
以上就是Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)