Golang 小技巧:使用 errors.Join 合并多个错误

举报
Ray999 发表于 2026/09/02 14:12:07 2026/09/02
【摘要】 在 Go 中,有时候一个操作可能产生多个错误,但函数最终只能返回一个 error。这时候可以使用 errors.Join 把多个错误合并起来。例如:err1 := errors.New("数据库关闭失败")err2 := errors.New("日志写入失败")err := errors.Join(err1, err2)fmt.Println(err)输出类似:数据库关闭失败日志写入失败实际...

在 Go 中,有时候一个操作可能产生多个错误,但函数最终只能返回一个 error。

这时候可以使用 errors.Join 把多个错误合并起来。

例如:

err1 := errors.New("数据库关闭失败")
err2 := errors.New("日志写入失败")

err := errors.Join(err1, err2)

fmt.Println(err)

输出类似:

数据库关闭失败
日志写入失败

实际开发中,可以用于统一处理多个清理操作:

func cleanup() error {
	var errs []error

	if err := closeDB(); err != nil {
		errs = append(errs, err)
	}

	if err := closeCache(); err != nil {
		errs = append(errs, err)
	}

	return errors.Join(errs...)
}

如果 errs 为空:

errors.Join(errs...)

会直接返回 nil,所以不需要额外判断。

而且合并后的错误依然可以使用:

errors.Is(err, target)

判断其中是否包含指定错误。

小结

当一个函数可能同时产生多个错误时,可以使用:

return errors.Join(errs...)

相比只返回最后一个错误,这种方式可以保留更多错误信息,特别适合资源清理、批量任务等场景。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。