当前位置:首页 > 科技  > 软件

Golang 中的 Errors 包详解,你都了解吗?

来源: 责编: 时间:2024-01-18 09:38:01 252观看
导读在 Golang 中,errors 包是用于处理错误的标准库, errors 包提供的功能比较简单,使用起来非常方便。接下来就具体讲解一下 errors 包提供的几个函数。errors.Newfunc New(text string) error错误处理是开发过程中必不可少

jIt28资讯网——每日最新资讯28at.com

在 Golang 中,errors 包是用于处理错误的标准库, errors 包提供的功能比较简单,使用起来非常方便。接下来就具体讲解一下 errors 包提供的几个函数。jIt28资讯网——每日最新资讯28at.com

errors.New

func New(text string) error

错误处理是开发过程中必不可少的,使用 errors.New 函数可以创建一个表示特定错误的对象。接受一个字符串类型的参数(用于描述错误信息),返回一个 error 类型的值。例如:jIt28资讯网——每日最新资讯28at.com

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

error 类型是 builtin 包中定义的一个接口,定义如下:jIt28资讯网——每日最新资讯28at.com

type error interface {	Error() string}

可以看出此接口定义了一个基本的 Error 方法,用于返回错误的描述信息。jIt28资讯网——每日最新资讯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。看个例子:jIt28资讯网——每日最新资讯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。jIt28资讯网——每日最新资讯28at.com

errors.AS

func As(err error, target any) bool

用于将错误转换为特定类型的错误,As 函数会检查 err 是否是 target 指向的类型的实例,如果是,将该实例赋值给 target 并返回 true。否则返回 false。看个例子:jIt28资讯网——每日最新资讯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。运行一下示例看下效果jIt28资讯网——每日最新资讯28at.com

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

这个功能通常用于处理不同类型的错误,根据错误的类型采取对应的处理方式。jIt28资讯网——每日最新资讯28at.com

errors.Unwrap

func Unwrap(err error) error

用于将一个错误对象展开,得到下一层错误对象,如果错误对象没有下一层错误对象,则返回 nil。看个例子:jIt28资讯网——每日最新资讯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 包装的错误对象。如果想要展开其他类型的错误对象,可以使用类型断言操作符 `.` 进行类型断言。jIt28资讯网——每日最新资讯28at.com

小结

errors 包提供了一些简单易用的函数来处理和获取错误信息,借助 errors 包可以实现非常强大的错误处理功能。jIt28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-64095-0.htmlGolang 中的 Errors 包详解,你都了解吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 微信支付进一步扩大数字人民币使用范围,新增数百万商户

下一篇: 你知道.NET中的数组在内存中如何布局的吗?

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top