亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況

P粉602998670
發(fā)布: 2025-08-18 13:06:02
原創(chuàng)
529人瀏覽過(guò)

要判斷是 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)題。

Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況

在 Go 語(yǔ)言中處理數(shù)據(jù)庫(kù)操作錯(cuò)誤時(shí),很多開(kāi)發(fā)者容易忽略一些特殊情況,比如

sql.ErrNoRows
登錄后復(fù)制
。這個(gè)錯(cuò)誤表示查詢沒(méi)有返回任何行,雖然它是一個(gè)“正?!钡那闆r(比如根據(jù) ID 查詢用戶不存在),但如果不做區(qū)分處理,很容易導(dǎo)致程序誤判為異常。

Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況

下面是一些實(shí)用的建議,幫助你更好地識(shí)別和處理這類(lèi)特殊錯(cuò)誤。

Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況

如何判斷是 sql.ErrNoRows 錯(cuò)誤

在使用

*sql.Row
登錄后復(fù)制
Scan
登錄后復(fù)制
方法時(shí),如果查詢沒(méi)有返回任何行,會(huì)返回
sql.ErrNoRows
登錄后復(fù)制
。這是標(biāo)準(zhǔn)庫(kù)定義的一個(gè)特定錯(cuò)誤值,可以通過(guò)直接比較來(lái)識(shí)別:

立即學(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ò)誤
    }
}
登錄后復(fù)制

需要注意的是:只有在使用

QueryRow
登錄后復(fù)制
并調(diào)用
Scan
登錄后復(fù)制
時(shí)才會(huì)返回
sql.ErrNoRows
登錄后復(fù)制
。如果是用
Query
登錄后復(fù)制
或者執(zhí)行更新語(yǔ)句,不會(huì)觸發(fā)這個(gè)錯(cuò)誤。

火山寫(xiě)作
火山寫(xiě)作

字節(jié)跳動(dòng)推出的中英文AI寫(xiě)作、語(yǔ)法糾錯(cuò)、智能潤(rùn)色工具,是一款集成創(chuàng)作、潤(rùn)色、糾錯(cuò)、改寫(xiě)、翻譯等能力的中英文 AI 寫(xiě)作助手。

火山寫(xiě)作105
查看詳情 火山寫(xiě)作
Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況

使用 Query 和 QueryContext 時(shí)如何處理空結(jié)果

當(dāng)你使用

Query
登錄后復(fù)制
QueryContext
登錄后復(fù)制
獲取多條記錄時(shí),即使沒(méi)有結(jié)果也不會(huì)返回
sql.ErrNoRows
登錄后復(fù)制
。這時(shí)候你需要通過(guò)檢查是否有數(shù)據(jù)來(lái)判斷是否為空:

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ò)誤或直接處理邏輯
}
登錄后復(fù)制

這種情況下,沒(méi)有數(shù)據(jù)只是業(yè)務(wù)邏輯上的“空”,不是錯(cuò)誤狀態(tài),所以不會(huì)拋出

sql.ErrNoRows
登錄后復(fù)制
。


常見(jiàn)誤區(qū)與建議

  • 不要把所有數(shù)據(jù)庫(kù)錯(cuò)誤都當(dāng)作嚴(yán)重問(wèn)題
    例如

    sql.ErrNoRows
    登錄后復(fù)制
    就是一個(gè)預(yù)期中的情況,應(yīng)該按業(yè)務(wù)邏輯處理,而不是直接打印日志或中斷流程。

  • 避免重復(fù)判斷錯(cuò)誤類(lèi)型
    如果你封裝了數(shù)據(jù)庫(kù)操作函數(shù),可以統(tǒng)一處理

    sql.ErrNoRows
    登錄后復(fù)制
    ,并返回更清晰的業(yè)務(wù)錯(cuò)誤碼或布爾標(biāo)志。

  • 使用 errors.Is 更安全地判斷錯(cuò)誤類(lèi)型
    雖然可以直接用

    ==
    登錄后復(fù)制
    判斷
    sql.ErrNoRows
    登錄后復(fù)制
    ,但在嵌套錯(cuò)誤的情況下,推薦使用
    errors.Is
    登錄后復(fù)制

    if errors.Is(err, sql.ErrNoRows) {
        // 處理未找到記錄的情況
    }
    登錄后復(fù)制
  • 適當(dāng)封裝查詢邏輯
    對(duì)于常用查詢操作,可以封裝成函數(shù),并返回是否找到結(jié)果的布爾值,這樣上層邏輯更容易處理。


基本上就這些。Go 中的數(shù)據(jù)庫(kù)錯(cuò)誤處理看似簡(jiǎn)單,但稍不注意就會(huì)漏掉像

sql.ErrNoRows
登錄后復(fù)制
這樣的細(xì)節(jié)。只要在關(guān)鍵位置做好判斷和封裝,就能寫(xiě)出更健壯的代碼。

以上就是Golang中如何處理數(shù)據(jù)庫(kù)操作錯(cuò)誤 解析sql.ErrNoRows等特殊情況的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)