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

搜索

Golang中errors包有哪些常用方法 詳解Golang標(biāo)準(zhǔn)庫(kù)的錯(cuò)誤處理工具

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

在 go 語(yǔ)言中,錯(cuò)誤處理通過(guò) errors 包實(shí)現(xiàn),主要包括創(chuàng)建、比較、提取和包裝錯(cuò)誤。1. 創(chuàng)建錯(cuò)誤使用 errors.new() 或 fmt.errorf(),前者適用于固定信息,后者用于動(dòng)態(tài)拼接;2. 錯(cuò)誤比較推薦使用 errors.is(),它支持遞歸檢查錯(cuò)誤鏈,也可用 == 比較簡(jiǎn)單判斷;3. 提取特定類型錯(cuò)誤使用 errors.as(),可在錯(cuò)誤鏈中查找目標(biāo)類型;4. 錯(cuò)誤包裝通過(guò) fmt.errorf 結(jié)合 %w 實(shí)現(xiàn),保留原始錯(cuò)誤信息,可用 errors.unwrap() 手動(dòng)解包,但更推薦直接配合 errors.is() 或 errors.as() 使用。

Golang中errors包有哪些常用方法 詳解Golang標(biāo)準(zhǔn)庫(kù)的錯(cuò)誤處理工具

在 Go 語(yǔ)言中,錯(cuò)誤處理是一個(gè)非常核心的部分。標(biāo)準(zhǔn)庫(kù)中的

errors
登錄后復(fù)制
包雖然簡(jiǎn)單,但卻是構(gòu)建健壯程序的基礎(chǔ)工具之一。它提供了一些基礎(chǔ)功能來(lái)創(chuàng)建和比較錯(cuò)誤。

Golang中errors包有哪些常用方法 詳解Golang標(biāo)準(zhǔn)庫(kù)的錯(cuò)誤處理工具

創(chuàng)建自定義錯(cuò)誤:使用
errors.New()
登錄后復(fù)制
fmt.Errorf
登錄后復(fù)制

最常用的兩種方式是通過(guò)

errors.New()
登錄后復(fù)制
或者
fmt.Errorf()
登錄后復(fù)制
來(lái)生成錯(cuò)誤:

Golang中errors包有哪些常用方法 詳解Golang標(biāo)準(zhǔn)庫(kù)的錯(cuò)誤處理工具
  • errors.New("your error message")
    登錄后復(fù)制

    這是最直接的方式,適合不需要格式化信息的場(chǎng)景。例如:

    err := errors.New("something went wrong")
    登錄后復(fù)制
  • fmt.Errorf("error occurred: %v", err)
    登錄后復(fù)制

    更加靈活,可以插入變量或拼接信息。注意,在 Go 1.13+ 中推薦加上
    %w
    登錄后復(fù)制
    動(dòng)詞用于包裝錯(cuò)誤(后面會(huì)提到):

    Golang中errors包有哪些常用方法 詳解Golang標(biāo)準(zhǔn)庫(kù)的錯(cuò)誤處理工具
    err := fmt.Errorf("failed to read file: %w", os.ErrNotExist)
    登錄后復(fù)制
如果你只是想返回一個(gè)固定的錯(cuò)誤字符串,用 errors.New 就夠了;需要?jiǎng)討B(tài)拼接時(shí),優(yōu)先考慮 fmt.Errorf。

錯(cuò)誤比較:
errors.Is()
登錄后復(fù)制
==
登錄后復(fù)制

當(dāng)我們需要判斷某個(gè)錯(cuò)誤是否是我們期望的那個(gè)時(shí),可以用到以下方法:

立即學(xué)習(xí)go語(yǔ)言免費(fèi)學(xué)習(xí)筆記(深入)”;

  • ==
    登錄后復(fù)制
    比較
    直接比較兩個(gè)錯(cuò)誤是否相同。適用于簡(jiǎn)單的預(yù)定義錯(cuò)誤,比如:

    if err == os.ErrNotExist {
        // 處理文件不存在的情況
    }
    登錄后復(fù)制
  • errors.Is(err, target)
    登錄后復(fù)制

    這是更推薦的做法,尤其當(dāng)你處理的是被包裝過(guò)的錯(cuò)誤(wrap)。這個(gè)函數(shù)會(huì)遞歸地檢查錯(cuò)誤鏈,直到找到匹配的目標(biāo)錯(cuò)誤為止。

注意:如果錯(cuò)誤是用

fmt.Errorf(...%w...)
登錄后復(fù)制
包裝過(guò)的,必須用
errors.Is()
登錄后復(fù)制
才能正確識(shí)別原始錯(cuò)誤。


獲取底層錯(cuò)誤:
errors.As()
登錄后復(fù)制

有時(shí)候我們需要從一個(gè)可能被包裝過(guò)的錯(cuò)誤中提取特定類型的錯(cuò)誤。這時(shí)候就要用到

errors.As()
登錄后復(fù)制

var pathErr *fs.PathError
if errors.As(err, &pathErr) {
    fmt.Println("File path error:", pathErr.Path)
}
登錄后復(fù)制

這段代碼的意思是:嘗試將

err
登錄后復(fù)制
轉(zhuǎn)換為
*fs.PathError
登錄后復(fù)制
類型,并獲取其中的信息。

慧中標(biāo)AI標(biāo)書(shū)
慧中標(biāo)AI標(biāo)書(shū)

慧中標(biāo)AI標(biāo)書(shū)是一款A(yù)I智能輔助寫(xiě)標(biāo)書(shū)工具。

慧中標(biāo)AI標(biāo)書(shū)83
查看詳情 慧中標(biāo)AI標(biāo)書(shū)
  • errors.As()
    登錄后復(fù)制
    會(huì)在錯(cuò)誤鏈中查找是否有目標(biāo)類型的錯(cuò)誤。
  • 與類型斷言不同,它不會(huì)因?yàn)橹虚g層錯(cuò)誤而失敗。

使用場(chǎng)景舉例:你調(diào)用了某個(gè)庫(kù)的方法,它返回了一個(gè)封裝后的錯(cuò)誤,你想從中提取出具體的系統(tǒng)錯(cuò)誤類型進(jìn)行處理。


錯(cuò)誤包裝(Wrap)和 Unwrap

Go 1.13 引入了錯(cuò)誤包裝機(jī)制,使得你可以把一個(gè)錯(cuò)誤包進(jìn)另一個(gè)里面,同時(shí)保留原始錯(cuò)誤信息。

  • 使用

    %w
    登錄后復(fù)制
    格式符包裝錯(cuò)誤

    err := fmt.Errorf("read failed: %w", io.ErrUnexpectedEOF)
    登錄后復(fù)制
  • 解包錯(cuò)誤:

    errors.Unwrap()
    登錄后復(fù)制
    可以手動(dòng)解開(kāi)一層包裝,拿到里面的錯(cuò)誤:

    cause := errors.Unwrap(err)
    登錄后復(fù)制

不過(guò)大多數(shù)情況下你并不需要自己去一層層拆包,而是直接用前面提到的

errors.Is()
登錄后復(fù)制
errors.As()
登錄后復(fù)制
來(lái)處理。


基本上就這些。Go 的

errors
登錄后復(fù)制
包設(shè)計(jì)得簡(jiǎn)潔但實(shí)用,掌握這幾個(gè)關(guān)鍵方法,就能應(yīng)對(duì)大多數(shù)錯(cuò)誤處理場(chǎng)景了。

以上就是Golang中errors包有哪些常用方法 詳解Golang標(biāo)準(zhǔn)庫(kù)的錯(cuò)誤處理工具的詳細(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)