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

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

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

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

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

errors.New

func New(text string) error

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

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

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

type error interface {	Error() string}

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

errors.AS

func As(err error, target any) bool

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

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

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

errors.Unwrap

func Unwrap(err error) error

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

小结

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

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

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

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

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

标签:
  • 热门焦点
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top