Go 1.20 将支持 wrapping multiple errors


Go 近日接受了名为「add support for wrapping multiple errors」的提案。

该项提案对错误处理进行了优化,与 Go 1.13 为错误处理提供的新功能有关:Error Wrapping。引入 Error Wrapping 后,Go 同时为errors包添加了 3 个工具函数,分别是UnwrapIsAs

对于「add support for wrapping multiple errors」提案,顾名思义就是一个错误可以包裹多个错误。

Unwrap() []error

提出该提案的开发者表示,重用Unwrap避免了与现有 Unwrap 方法产生歧义,从Unwrap中返回一个长度为 0 的列表意味着错误没有包裹任何内容。调用方不得修改由Unwrap返回的列表,Unwrap返回的列表不得包含任何nil错误。

他还对errors.Iserrors.As函数进行了更新,实现对 multiple errors 进行Unwrap操作。

errors.Join函数提供了 multierr 的简单实现:

// Join returns an error that wraps the given errors.
// Any nil error values are discarded.
// The error formats as the text of the given errors, separated by newlines.
// Join returns nil if errs contains no non-nil values.
func Join(errs ...error) error

目前该提案已被接受,作者表示将在 Go 1.20 中提供:

详情查看 https://github.com/golang/go/issues/53435。


相關推薦

2023-06-10

crypto tests 中的 "fatal error: checkptr: converted pointer straddles multiple allocations" 更新说明:https://github.com/syncthing/syncthing/releases/tag/v1.23.5

2022-12-13

ttps://go.dev/dl/#go1.20rc1 值得注意的是,Go 1.20 是最后一个支持在 macOS 10.13 High Sierra 或 10.14 Mojave 上运行的版本。Go 1.21 将需要 macOS 10.15 Catalina 或更高版本。 此外,Go 1.20 添加了对 RISC-V 上的 FreeBSD (GOOS=freebsd, GOARCH=riscv64)

2023-09-03

ed from 5 to 20. [Text terminal] Optimize the processing logic for pasting multiple lines of strings, making the line wrapping process as consistent as possible with the terminal mode. [Serial port]Add input history management function and other minor optimizations to the local serial port. 开源

2023-07-12

ssh 客户端 】tssh 发布 v0.1.6,解决了 known hosts 的问题,支持更多类型的私钥( 含密码 )。 GitHub:https://github.com/trzsz/trzsz-ssh Gitee:https://gitee.com/trzsz/tssh 安装方法 客户端安装 trzsz-ssh ( tssh ) 的方法如下( 任

2024-08-10

开发者能够快速上手并集成到现有项目中。 灵活配置:支持代码直接配置日志的输出级别、输出目标(如标准输出、文件等)以及日志格式。 性能考虑:设计时考虑了性能因素,尽量减少日志记录操作的开销,通过优化内存

2023-07-18

Go 版 trzsz ( trz / tsz ) 发布 v1.1.4,支持断点续传,进一步优化了传输速度和使用体验: 1 、如果传输发生中断,或者传完后文件有修改,再使用 trz -y 上传,或者使用 tsz -y xxx 下载, 将会快速跳过前面一致的部分

2024-08-20

【文件传输工具】trzsz ( trz / tsz ) 发布 v1.1.8,支持后台传输,只要加上 -f 参数即可,如 trz -f 和 tsz -f xxx。 服务端开源 GitHub:https://github.com/trzsz/trzsz-go 客户端开源 GitHub:https://github.com/trzsz/trzsz-ssh 服务端安装方法 Ubuntu

2023-02-21

。 下面是一个示例程序,当直接在带有板载 LED 的任何支持板上运行时,内置 LED 闪烁: package main import ( "machine" "time" ) func main() { led := machine.LED led.Configure(machine.PinConfig{Mode: machine.PinOutput}) for { led.Low() time.Sleep(time.Millisecond *

2022-10-21

容器镜像构建器,最近还添加了一些新功能,包括多平台支持和自动 SBOM 生成。 就像谷歌的 original team 一样,现如今许多开源和企业开发团队都依赖 ko 来提高他们的开发人员生产力。ko 项目也越来越多地用作许多构建用例的

2023-07-05

trzsz-ssh ( tssh ) 发布 v0.1.5,新版本支持记住密码、记住 keyboard interactive 的答案自动登录。 你是否曾经因为服务器太多记不住,而喜欢的 ssh 终端又没有服务器管理功能而苦恼? tssh 支持选择( 搜索 ) ~/.ssh/config 中配

2023-06-05

功能( 除了 ssh 端口转发 ),一般人用到的 ssh 功能都已支持,欢迎各位大佬试用。 两大额外功能( 亮点 ): 1 、支持选择( 搜索 )~/.ssh/config 中的服务器,进行登录。相当于 tssh 内置了服务器管理功能,并且类似 vim 的操

2023-05-18

他们没有付诸行动的原因是,其他语言有框架可以更好地支持此用例。可能是更有经验的 Go 开发人员不会尝试或期望将 Go 用于此用例,而其他语言已经拥有满足这些需求的框架。“用其他语言(如 PHP 或 Ruby)通常更容易做到这

2023-01-09

gin.HandlersChain Login(c *gin.Context, req *LoginReq) (*LoginResp, mir.Error) Logout(c *gin.Context) mir.Error mustEmbedUnimplementedUserServant() } type UserBinding interface { BindLogin(c *gin.Context) (*LoginReq, mir.Error) mustEmbedUnimplementedUserBinding() } type UserRender interfa

2023-07-19

,发布 v0.1.7 新版本,升级 trzsz ( trz / tsz ) 到 1.1.4 版本,支持断点续传,进一步优化了传输速度和使用体验: 1 、如果传输发生中断,或者传完后文件有修改,再使用 trz -y 上传,或者使用 tsz -y xxx 下载, 将会快