最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Golang中的errors包

 更新時(shí)間:2023年07月11日 10:51:48   作者:路多辛  
在 Golang 中,errors 包是用于處理錯(cuò)誤的標(biāo)準(zhǔn)庫(kù), errors 包提供的功能比較簡(jiǎn)單,使用起來(lái)非常方便,接下來(lái)就具體講解一下 errors 包提供的幾個(gè)函數(shù),感興趣的小伙伴跟著小編一起來(lái)看看吧

errors.New

func New(text string) error

錯(cuò)誤處理是開(kāi)發(fā)過(guò)程中必不可少的,使用 errors.New 函數(shù)可以創(chuàng)建一個(gè)表示特定錯(cuò)誤的對(duì)象。接受一個(gè)字符串類型的參數(shù)(用于描述錯(cuò)誤信息),返回一個(gè) error 類型的值。例如:

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

error 類型是 builtin 包中定義的一個(gè)接口,定義如下:

type error interface {
	Error() string
}

可以看出此接口定義了一個(gè)基本的 Error 方法,用于返回錯(cuò)誤的描述信息。

package main
import (
	"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

用于判斷給定的錯(cuò)誤是否是目標(biāo)錯(cuò)誤類型或者基于目標(biāo)錯(cuò)誤類型包裝過(guò)的錯(cuò)誤,會(huì)遞歸檢查錯(cuò)誤鏈,直到找到目標(biāo)錯(cuò)誤類型或者到達(dá)錯(cuò)誤鏈的末尾。如果找到目標(biāo)錯(cuò)誤類型,則返回true,否則返回false。看個(gè)例子:

package main
import (
	"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
}

因?yàn)?err 和 err1 都是使用 errors.New 函數(shù)創(chuàng)建的,所以使用 Is 判斷會(huì)返回 false。err2 是基于 err 包裝出來(lái)的,所以使用 Is 判斷會(huì)返回 true。

errors.AS

func As(err error, target any) bool

用于將錯(cuò)誤轉(zhuǎn)換為特定類型的錯(cuò)誤,As 函數(shù)會(huì)檢查 err 是否是 target 指向的類型的實(shí)例,如果是,將該實(shí)例賦值給 target 并返回 true。否則返回 false。看個(gè)例子:

package main
import (
	"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 來(lái)檢查 err 是否是 MyError 類型的實(shí)例,并將實(shí)例賦值給 target。運(yùn)行一下示例看下效果

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

這個(gè)功能通常用于處理不同類型的錯(cuò)誤,根據(jù)錯(cuò)誤的類型采取對(duì)應(yīng)的處理方式。

errors.Unwrap

func Unwrap(err error) error

用于將一個(gè)錯(cuò)誤對(duì)象展開(kāi),得到下一層錯(cuò)誤對(duì)象,如果錯(cuò)誤對(duì)象沒(méi)有下一層錯(cuò)誤對(duì)象,則返回 nil。看個(gè)例子:

package main
import (
	"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 函數(shù)將 originalErr 做了一層包裝后得到 err,然后通過(guò)使用 Unwrap 將 err 解包并得包裝前的錯(cuò)誤對(duì)象 originalErr。需要注意的是 Unwrap 只能展開(kāi)被 fmt.Errorf 包裝的錯(cuò)誤對(duì)象。如果想要展開(kāi)其他類型的錯(cuò)誤對(duì)象,可以使用類型斷言操作符 `.` 進(jìn)行類型斷言。

小結(jié)

errors 包提供了一些簡(jiǎn)單易用的函數(shù)來(lái)處理和獲取錯(cuò)誤信息,借助 errors 包可以實(shí)現(xiàn)非常強(qiáng)大的錯(cuò)誤處理功能。

到此這篇關(guān)于一文詳解Golang中的errors包的文章就介紹到這了,更多相關(guān)Golang errors包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang日志包logger的用法詳解

    golang日志包logger的用法詳解

    這篇文章主要介紹了golang日志包logger的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • VSCode必裝Go語(yǔ)言以下插件的思路詳解

    VSCode必裝Go語(yǔ)言以下插件的思路詳解

    這篇文章主要介紹了VSCode必裝Go語(yǔ)言以下插件的思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • go語(yǔ)言搬磚之go jmespath實(shí)現(xiàn)查詢json數(shù)據(jù)

    go語(yǔ)言搬磚之go jmespath實(shí)現(xiàn)查詢json數(shù)據(jù)

    這篇文章主要為大家介紹了go語(yǔ)言搬磚之go jmespath實(shí)現(xiàn)查詢json數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go讀取配置文件的方法總結(jié)

    Go讀取配置文件的方法總結(jié)

    我們常見(jiàn)的配置文件的格式一般有:XML、JSON、INI、YAML、env和.properties,本文小編為大家整理了Go語(yǔ)言讀取這些格式的配置文件的方法,希望對(duì)大家有所幫助
    2023-10-10
  • Go語(yǔ)言使用Gin處理路由參數(shù)和查詢參數(shù)

    Go語(yǔ)言使用Gin處理路由參數(shù)和查詢參數(shù)

    在 Web API 開(kāi)發(fā)中,處理?路由參數(shù)(Path Parameter) ?和?查詢參數(shù)(Query Parameter) ?是非常常見(jiàn)的需求,下面我們就來(lái)看看Go語(yǔ)言如何使用Gin 框架處理路由參數(shù)和查詢參數(shù)吧
    2025-08-08
  • Go中的動(dòng)態(tài)速率限制有效控制流量

    Go中的動(dòng)態(tài)速率限制有效控制流量

    這篇文章主要為大家介紹了Go中的動(dòng)態(tài)速率限制有效控制流量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法

    使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法

    go語(yǔ)言web框架挺多的,本文就介紹了一下如何使用gin框架搭建簡(jiǎn)易服務(wù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go實(shí)現(xiàn)并發(fā)的示例代碼

    Go實(shí)現(xiàn)并發(fā)的示例代碼

    Go語(yǔ)言的并發(fā)機(jī)制是其強(qiáng)大和流行的一個(gè)關(guān)鍵特性之一,本文主要介紹了Go實(shí)現(xiàn)并發(fā)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Go中g(shù)routine通信與context控制實(shí)例詳解

    Go中g(shù)routine通信與context控制實(shí)例詳解

    隨著context包的引入,標(biāo)準(zhǔn)庫(kù)中很多接口因此加上了context參數(shù),下面這篇文章主要給大家介紹了關(guān)于Go中g(shù)routine通信與context控制的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • golang?對(duì)象深拷貝的常見(jiàn)方式及性能

    golang?對(duì)象深拷貝的常見(jiàn)方式及性能

    這篇文章主要介紹了golang?對(duì)象深拷貝的常見(jiàn)方式及性能,Go語(yǔ)言中所有賦值操作都是值傳遞,如果結(jié)構(gòu)中不含指針,則直接賦值就是深度拷貝,文章圍繞主題展開(kāi)更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-06-06

最新評(píng)論

湖北省| 河源市| 锡林郭勒盟| 合作市| 大石桥市| 新宁县| 枞阳县| 三明市| 敦化市| 遂平县| 松江区| 莎车县| 永仁县| 灵丘县| 巴楚县| 瓦房店市| 贺州市| 无为县| 大港区| 澄江县| 正阳县| 威信县| 赞皇县| 庄河市| 汉中市| 威海市| 博野县| 大渡口区| 周宁县| 湾仔区| 明光市| 宜城市| 大渡口区| 墨脱县| 崇信县| 平阳县| 当涂县| 射阳县| 抚顺县| 彩票| 会昌县|