日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Golang 中的 Errors 包詳解,你都了解嗎?

來源: 責編: 時間:2024-01-18 09:38:01 223觀看
導讀在 Golang 中,errors 包是用于處理錯誤的標準庫, errors 包提供的功能比較簡單,使用起來非常方便。接下來就具體講解一下 errors 包提供的幾個函數。errors.Newfunc New(text string) error錯誤處理是開發過程中必不可少

3m428資訊網——每日最新資訊28at.com

在 Golang 中,errors 包是用于處理錯誤的標準庫, errors 包提供的功能比較簡單,使用起來非常方便。接下來就具體講解一下 errors 包提供的幾個函數。3m428資訊網——每日最新資訊28at.com

errors.New

func New(text string) error

錯誤處理是開發過程中必不可少的,使用 errors.New 函數可以創建一個表示特定錯誤的對象。接受一個字符串類型的參數(用于描述錯誤信息),返回一個 error 類型的值。例如:3m428資訊網——每日最新資訊28at.com

package mainimport "errors"func main() {	err := errors.New("invalid input")}

error 類型是 builtin 包中定義的一個接口,定義如下:3m428資訊網——每日最新資訊28at.com

type error interface {	Error() string}

可以看出此接口定義了一個基本的 Error 方法,用于返回錯誤的描述信息。3m428資訊網——每日最新資訊28at.com

package mainimport (	"errors"	"fmt")func main() {	err := errors.New("invalid input")	errDesc := err.Error()	fmt.Println(errDesc) // 輸出 invalid input}

errors.Is

func Is(err, target error) bool

用于判斷給定的錯誤是否是目標錯誤類型或者基于目標錯誤類型包裝過的錯誤,會遞歸檢查錯誤鏈,直到找到目標錯誤類型或者到達錯誤鏈的末尾。如果找到目標錯誤類型,則返回true,否則返回false。看個例子:3m428資訊網——每日最新資訊28at.com

package mainimport (	"errors"	"fmt")func main() {	err := errors.New("invalid input")	err1 := errors.New("invalid input")	err2 := fmt.Errorf("err2: [%w]", err)	fmt.Println(errors.Is(err1, err)) // false	fmt.Println(errors.Is(err2, err)) // true}

因為 err 和 err1 都是使用 errors.New 函數創建的,所以使用 Is 判斷會返回 false。err2 是基于 err 包裝出來的,所以使用 Is 判斷會返回 true。3m428資訊網——每日最新資訊28at.com

errors.AS

func As(err error, target any) bool

用于將錯誤轉換為特定類型的錯誤,As 函數會檢查 err 是否是 target 指向的類型的實例,如果是,將該實例賦值給 target 并返回 true。否則返回 false。看個例子:3m428資訊網——每日最新資訊28at.com

package mainimport (	"errors"	"fmt")type MyError struct {	Message string}func (e *MyError) Error() string {	return e.Message}func main() {	err := &MyError{		Message: "This is a custom error",	}	var target *MyError	if errors.As(err, &target) {		fmt.Println("Custom error found:", target.Message)	} else {		fmt.Println("Custom error not found")	}}

使用 errors.As 來檢查 err 是否是 MyError 類型的實例,并將實例賦值給 target。運行一下示例看下效果3m428資訊網——每日最新資訊28at.com

$ go run main.goCustom error found: This is a custom error

這個功能通常用于處理不同類型的錯誤,根據錯誤的類型采取對應的處理方式。3m428資訊網——每日最新資訊28at.com

errors.Unwrap

func Unwrap(err error) error

用于將一個錯誤對象展開,得到下一層錯誤對象,如果錯誤對象沒有下一層錯誤對象,則返回 nil。看個例子:3m428資訊網——每日最新資訊28at.com

package mainimport (	"errors"	"fmt")func main() {  originalErr := errors.New("original error")	err := fmt.Errorf("error: %w", originalErr)	unwrappedErr := errors.Unwrap(err)	fmt.Println(unwrappedErr) // 輸出: original error}

使用 fmt.Errorf 函數將 originalErr 做了一層包裝后得到 err,然后通過使用 Unwrap 將 err 解包并得包裝前的錯誤對象 originalErr。需要注意的是 Unwrap 只能展開被 fmt.Errorf 包裝的錯誤對象。如果想要展開其他類型的錯誤對象,可以使用類型斷言操作符 `.` 進行類型斷言。3m428資訊網——每日最新資訊28at.com

小結

errors 包提供了一些簡單易用的函數來處理和獲取錯誤信息,借助 errors 包可以實現非常強大的錯誤處理功能。3m428資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-64095-0.htmlGolang 中的 Errors 包詳解,你都了解嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 微信支付進一步擴大數字人民幣使用范圍,新增數百萬商戶

下一篇: 你知道.NET中的數組在內存中如何布局的嗎?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 灵宝市| 沧源| 蒙山县| 大足县| 大石桥市| 鹤庆县| 翼城县| 天镇县| 兴安盟| 华池县| 巴楚县| 永德县| 博乐市| 公主岭市| 太仆寺旗| 尼玛县| 南雄市| 额济纳旗| 博爱县| 五家渠市| 湖州市| 龙陵县| 塘沽区| 钦州市| 得荣县| 德令哈市| 双江| 密山市| 平湖市| 嘉兴市| 武汉市| 阆中市| 米林县| 济源市| 涪陵区| 肇庆市| 抚州市| 寿阳县| 安顺市| 于都县| 三河市|