golang 1.13 引入的 errors.is、as 和 unwrap 方法提升了错误处理能力。01. is 用于判断错误链中是否存在指定目标错误;02. as 用于从错误链中提取特定类型的错误对象;03. unwrap 用于解包一层包装错误,若非包装错误则返回 nil。这些方法支持嵌套错误处理,避免直接比较字符串错误信息,推荐优先使用它们而非类型断言,并注意避免滥用 %w 导致调试复杂化。

Golang 的
errors
Is
As
Unwrap

Go 中的错误可以被“包装”起来,形成一个链式的错误结构。例如:

err := fmt.Errorf("something went wrong: %w", io.ErrUnexpectedEOF)这里的
%w
io.ErrUnexpectedEOF
立即学习“go语言免费学习笔记(深入)”;
这时候就可以使用
Unwrap

unwrappedErr := errors.Unwrap(err)
如果
err
fmt.Errorf(..., %w)
Unwrap
nil
注意:Unwrap 只能解一层包装。如果你有多个层级的包装错误,可能需要用多次 Unwrap 或者用 Is/As 来查找目标错误。
有时候你并不关心错误的具体值,而是想知道它是否是某个特定错误类型或值。这个时候可以用
Is
if errors.Is(err, io.ErrUnexpectedEOF) {
// 处理 io.ErrUnexpectedEOF 的情况
}Is
true
常见用途:
os.ErrNotExist
当你想从错误链中提取出某个具体的错误类型时,
As
var pathErr *fs.PathError
if errors.As(err, &pathErr) {
fmt.Println("File path error:", pathErr.Path)
}上面的例子中,
errors.As
*fs.PathError
pathErr
几点注意:
As
%w
Is
As
总的来说,
Is
As
Unwrap
以上就是Golang的errors包有哪些实用功能 分析Is As和Unwrap方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号