国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
創(chuàng)建基本錯(cuò)誤
包裝上下文錯(cuò)誤
解開(kāi)和檢查錯(cuò)誤
當(dāng)不包裹時(shí)
首頁(yè) 後端開(kāi)發(fā) Golang 如何使用錯(cuò)誤軟件包在GO中創(chuàng)建和包裝錯(cuò)誤?

如何使用錯(cuò)誤軟件包在GO中創(chuàng)建和包裝錯(cuò)誤?

Jun 23, 2025 pm 11:29 PM
go 錯(cuò)誤處理

在GO中,有效的錯(cuò)誤處理使用錯(cuò)誤。 new或fmt.errorf進(jìn)行基本錯(cuò)誤,用%w包裹錯(cuò)誤以保留上下文,並使用errors.is and錯(cuò)誤檢查錯(cuò)誤。 1。 errors.new和fmt.Errorf創(chuàng)建簡(jiǎn)單的錯(cuò)誤而沒(méi)有上下文。 2。用%w包裝添加上下文,同時(shí)保留原始錯(cuò)誤的身份。 3。錯(cuò)誤。是否檢查鏈中的目標(biāo)錯(cuò)誤。 4。錯(cuò)誤。找到並分配了匹配的錯(cuò)誤類(lèi)型。 5。避免包裹前哨或無(wú)關(guān)的錯(cuò)誤,以防止噪音和復(fù)雜性。

如何使用錯(cuò)誤軟件包在GO中創(chuàng)建和包裝錯(cuò)誤?

在GO中,有效處理錯(cuò)誤對(duì)於構(gòu)建強(qiáng)大的應(yīng)用程序至關(guān)重要。 errors軟件包,尤其是在GO 1.13中引入錯(cuò)誤包裝的過(guò)程中,提供了一種干淨(jìng)而有力的方法來(lái)在您的代碼庫(kù)中創(chuàng)建和管理錯(cuò)誤。

創(chuàng)建基本錯(cuò)誤

在GO中創(chuàng)建錯(cuò)誤的最直接方法是使用errors.New()fmt.Errorf() 。當(dāng)您只需要一個(gè)簡(jiǎn)單的錯(cuò)誤消息而沒(méi)有任何額外上下文時(shí),這些功能是完美的:

導(dǎo)入“錯(cuò)誤”

err:= errors.new(“出了問(wèn)題出了問(wèn)題”)

或格式:

 err:= fmt.errorf(“無(wú)效值:%v”,val)

這些方法在簡(jiǎn)單的情況下很有用,例如驗(yàn)證輸入或返回功能中的已知故障條件。

如果您需要的只是一個(gè)基本錯(cuò)誤,則以後不需要檢查,那麼這些都很好。請(qǐng)記住,它們不會(huì)攜帶任何其他元數(shù)據(jù)或引起信息 - 它們是平弦。

包裝上下文錯(cuò)誤

在編寫(xiě)分層應(yīng)用程序時(shí),不僅要知道發(fā)生了什麼錯(cuò)誤,還要知道它來(lái)自何處,通常很重要。這是錯(cuò)誤包裝派上用場(chǎng)的地方。

您可以使用fmt.Errorf()中的%w動(dòng)詞包裝錯(cuò)誤:

 err:= fmt.Errorf(“未能讀取config:%w”,onigralerr)

這將originalErr包裹在新的錯(cuò)誤中,同時(shí)保留其身份。稍後,您可以使用errors.Is()errors.As()檢查鏈條並檢查呼叫堆棧中某個(gè)地方是否存在特定錯(cuò)誤。

這就是為什麼這很重要的原因:

  • 它允許高級(jí)功能將上下文添加到低級(jí)錯(cuò)誤。
  • 您仍然可以通過(guò)編程方式檢查深處發(fā)生了什麼樣的錯(cuò)誤。
  • 堆棧跟蹤(如果使用)保持乾淨(jìng)和有意義。

因此,每當(dāng)您返回起源於其他地方的錯(cuò)誤時(shí),請(qǐng)考慮包裝它而不僅僅是格式化 - 它使調(diào)試變得更加容易。

解開(kāi)和檢查錯(cuò)誤

包裝錯(cuò)誤後,您可能需要在某個(gè)時(shí)候檢查它們 - 例如,以不同的方式處理特定類(lèi)型的錯(cuò)誤。

GO為此提供了兩個(gè)主要工具:

  • errors.Is(err, target) - 檢查鏈中的任何錯(cuò)誤是否與目標(biāo)匹配。
  • errors.As(err, &target) - 找到與給定類(lèi)型匹配並將其分配給目標(biāo)的鏈中的第一個(gè)錯(cuò)誤。

例如:

如果errors.is(err,os.errnotexist){
    //處理未找到的文件
}

或具有自定義錯(cuò)誤類(lèi)型:

 var syntaxerr *Syntaxerror
如果errors.as(err,&syntaxerr){
    fmt.println(“ line:”,syntaxerr.line)
}

這些功能會(huì)自動(dòng)穿過(guò)包裝錯(cuò)誤的鏈條,因此您無(wú)需親自手動(dòng)解開(kāi)每一層。

請(qǐng)記住:

  • errors.Is基於平等( == )或工具Is() bool
  • errors.As按檢查類(lèi)型匹配的檢查並設(shè)置指針(如果發(fā)現(xiàn))。
  • 僅出口字段和類(lèi)型應(yīng)用於檢查。

當(dāng)不包裹時(shí)

儘管包裝錯(cuò)誤很有幫助,但有時(shí)會(huì)不必要甚至適得其反。

例如:

  • 如果您要?jiǎng)?chuàng)建的哨兵錯(cuò)誤旨在完全匹配,請(qǐng)不要包裝它。
  • 如果您要生成與原始錯(cuò)誤無(wú)關(guān)的全新錯(cuò)誤,則只需通常格式即可。
  • 如果您已經(jīng)記錄了錯(cuò)誤,並且僅將其傳遞給可見(jiàn)性,則包裝可能會(huì)增加噪音。

一個(gè)好的經(jīng)驗(yàn)法則:當(dāng)您想保留其身份以供以後檢查時(shí),請(qǐng)包裹錯(cuò)誤。否則,請(qǐng)堅(jiān)持普通格式。

另外,除非必要,否則避免多次包裝已包裝的錯(cuò)誤 - 它可能會(huì)使錯(cuò)誤鏈更難遵循。


這基本上就是您在現(xiàn)代GO中使用errors軟件包的方式。它並不復(fù)雜,但是在決定是包裝還是僅僅是格式化時(shí),確實(shí)需要一點(diǎn)護(hù)理。

以上是如何使用錯(cuò)誤軟件包在GO中創(chuàng)建和包裝錯(cuò)誤?的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話(huà)題

Laravel 教程
1601
29
PHP教程
1502
276
GO應(yīng)用程序的標(biāo)準(zhǔn)項(xiàng)目佈局是什麼? GO應(yīng)用程序的標(biāo)準(zhǔn)項(xiàng)目佈局是什麼? Aug 02, 2025 pm 02:31 PM

答案是:Go應(yīng)用沒(méi)有強(qiáng)制項(xiàng)目佈局,但社區(qū)普遍採(cǎi)用一種標(biāo)準(zhǔn)結(jié)構(gòu)以提升可維護(hù)性和擴(kuò)展性。 1.cmd/存放程序入口,每個(gè)子目錄對(duì)應(yīng)一個(gè)可執(zhí)行文件,如cmd/myapp/main.go;2.internal/存放私有代碼,不可被外部模塊導(dǎo)入,用於封裝業(yè)務(wù)邏輯和服務(wù);3.pkg/存放可公開(kāi)復(fù)用的庫(kù),供其他項(xiàng)目導(dǎo)入;4.api/可選,存放OpenAPI、Protobuf等API定義文件;5.config/、scripts/、web/分別存放配置文件、腳本和Web資源;6.根目錄包含go.mod和go.sum

您如何在Go中逐行讀取文件? 您如何在Go中逐行讀取文件? Aug 02, 2025 am 05:17 AM

使用bufio.Scanner是Go中逐行讀取文件最常見(jiàn)且高效的方法,適用於處理大文件、日誌解析或配置文件等場(chǎng)景。 1.使用os.Open打開(kāi)文件並確保通過(guò)deferfile.Close()關(guān)閉文件。 2.通過(guò)bufio.NewScanner創(chuàng)建掃描器實(shí)例。 3.在for循環(huán)中調(diào)用scanner.Scan()逐行讀取,直到返回false表示到達(dá)文件末尾或出錯(cuò)。 4.使用scanner.Text()獲取當(dāng)前行內(nèi)容(不含換行符)。 5.循環(huán)結(jié)束後檢查scanner.Err()以捕獲可能的讀取錯(cuò)誤。此方法內(nèi)存效

您如何處理GO Web應(yīng)用程序中的路由? 您如何處理GO Web應(yīng)用程序中的路由? Aug 02, 2025 am 06:49 AM

Go應(yīng)用中的路由選擇取決於項(xiàng)目複雜度,1.使用標(biāo)準(zhǔn)庫(kù)net/httpServeMux適合簡(jiǎn)單應(yīng)用,無(wú)需外部依賴(lài)且輕量,但不支持URL參數(shù)和高級(jí)匹配;2.第三方路由器如Chi提供中間件、路徑參數(shù)和嵌套路由,適合模塊化設(shè)計(jì);3.Gin性能優(yōu)異,內(nèi)置JSON處理和豐富功能,適合API和微服務(wù)。應(yīng)根據(jù)是否需要靈活性、性能或功能集成來(lái)選擇,小型項(xiàng)目用標(biāo)準(zhǔn)庫(kù),中大型項(xiàng)目推薦Chi或Gin,最終實(shí)現(xiàn)從簡(jiǎn)單到復(fù)雜的平滑擴(kuò)展。

您如何在GO中解析命令行旗幟? 您如何在GO中解析命令行旗幟? Aug 02, 2025 pm 04:24 PM

Go的flag包可輕鬆解析命令行參數(shù),1.使用flag.Type()定義字符串、整型、布爾等類(lèi)型標(biāo)誌;2.可通過(guò)flag.TypeVar()將標(biāo)誌解析到變量避免指針操作;3.調(diào)用flag.Parse()後,用flag.Args()獲取後續(xù)位置參數(shù);4.實(shí)現(xiàn)flag.Value接口可支持自定義類(lèi)型,滿(mǎn)足多數(shù)簡(jiǎn)單CLI需求,複雜場(chǎng)景可用spf13/cobra庫(kù)替代。

HTML5解析器如何處理錯(cuò)誤? HTML5解析器如何處理錯(cuò)誤? Aug 02, 2025 am 07:51 AM

HTML5parsershandlemalformedHTMLbyfollowingadeterministicalgorithmtoensureconsistentandrobustrendering.1.Formismatchedorunclosedtags,theparserautomaticallyclosestagsandadjustsnestingbasedoncontext,suchasclosingabeforeaandreopeningitafterward.2.Withimp

您如何使用諸如if-else in go中的條件語(yǔ)句? 您如何使用諸如if-else in go中的條件語(yǔ)句? Aug 02, 2025 pm 03:16 PM

Go中的if-else語(yǔ)句無(wú)需括號(hào)但必須使用花括號(hào),支持在if中初始化變量以限製作用域,可通過(guò)elseif鍊式判斷條件,常用於錯(cuò)誤檢查,且變量聲明與條件結(jié)合可提升代碼簡(jiǎn)潔性與安全性。

您如何在Go中宣布常數(shù)? 您如何在Go中宣布常數(shù)? Aug 02, 2025 pm 04:21 PM

在Go中,常量使用const關(guān)鍵字聲明,且值不可更改,可為無(wú)類(lèi)型或有類(lèi)型;1.單個(gè)常量聲明如constPi=3.14159;2.塊內(nèi)多個(gè)常量聲明如const(Pi=3.14159;Language="Go";IsCool=true);3.顯式類(lèi)型常量如constSecondsInMinuteint=60;4.使用iota生成枚舉值,如const(Sunday=iota;Monday;Tuesday)將依次賦值0、1、2,且iota可用於位運(yùn)算等表達(dá)式;常量必須在編譯時(shí)確定值,

Go Run命令做什麼? Go Run命令做什麼? Aug 03, 2025 am 03:49 AM

gorun是一個(gè)用於快速編譯並執(zhí)行Go程序的命令,1.它在一步中完成編譯和運(yùn)行,生成臨時(shí)可執(zhí)行文件並在程序結(jié)束後刪除;2.適用於包含main函數(shù)的獨(dú)立程序,便於開(kāi)發(fā)和測(cè)試;3.支持多文件運(yùn)行,可通過(guò)gorun*.go或列出所有文件執(zhí)行;4.自動(dòng)處理依賴(lài),利用模塊系統(tǒng)解析外部包;5.不適用於庫(kù)或包,且不生成持久化二進(jìn)製文件,因此適合腳本、學(xué)習(xí)和頻繁修改時(shí)的快速測(cè)試,是一種高效、簡(jiǎn)潔的即時(shí)運(yùn)行方式。

See all articles