errors.Is用于判断错误是否等于目标错误或被其包装,可穿透多层包装。使用%w包装错误时,errors.Is能递归匹配错误链,适合判断预定义错误值,而errors.As用于类型断言和提取自定义错误类型。

在Go语言中,判断错误是否为某个特定类型的错误是常见需求。从Go 1.13开始,errors.Is 函数被引入,用于比较两个错误是否“相等”,它能穿透包装的错误(wrapped errors),逐层检查是否与目标错误匹配。
errors.Is(err, target) 的作用是判断 err 是否与 target 是同一个错误,或是否被包装了该目标错误。相比直接用 == 比较,它更强大,因为它会递归检查错误链中的每一个包装层。
例如:一个错误可能被多次包装,但只要其中某一层是目标错误,errors.Is 就会返回 true。
假设你有一个函数返回一个包装过的错误,你可以用 errors.Is 来判断原始错误是否是你关心的那个:
立即学习“go语言免费学习笔记(深入)”;
这里 %w 是关键,它表示将 ErrNotFound 包装进新错误中。如果没有使用 %w,而是用 %v,那么错误就不会被包装,errors.Is 也无法识别。
即使错误被多层包装,errors.Is 依然有效:
这说明 errors.Is 会沿着错误链一直往下找,直到发现匹配的错误或结束。
注意不要混淆 errors.Is 和 errors.As:
如果你定义的是自定义错误类型,应该用 errors.As;如果是预定义的错误变量,用 errors.Is 更合适。
基本上就这些。只要记住使用 %w 包装错误,并用 errors.Is 做判断,就能正确处理常见的错误匹配场景。
以上就是Golang如何使用errors.Is判断错误的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号