掌握Go错误处理需优先使用标准库工具:1. 用类型断言处理已知错误类型;2. 用errors.As提取错误链中的特定类型;3. 用errors.Is判断是否为哨兵错误;4. 封装错误判断函数提升可读性。

在Go语言中,错误处理是程序设计的重要部分。由于
error
Go中的
error
Error() string
例如,某些库会返回自定义错误类型,我们可以直接断言:
if err != nil {
if e, ok := err.(*MyCustomError); ok {
// 处理自定义错误
fmt.Println("Custom error occurred:", e.Code)
} else {
// 处理其他错误
fmt.Println("Unknown error:", err)
}
}
这种方式适用于你知道错误可能的具体类型,比如标准库中的
*os.PathError
立即学习“go语言免费学习笔记(深入)”;
Go 1.13引入了
errors.As
errors.Is
fmt.Errorf
%w
当你使用
fmt.Errorf("failed: %w", err)errors.As
if err != nil {
var pathErr *os.PathError
if errors.As(err, &pathErr) {
fmt.Println("Path error:", pathErr.Path)
}
}
errors.As
有些情况下,错误是通过
errors.New
fmt.Errorf
io.EOF
errors.Is
if errors.Is(err, io.EOF) {
fmt.Println("Reached end of file")
}
即使这个
io.EOF
errors.Is
==
Equal
当错误判断逻辑复杂或在多处使用时,建议封装成函数,提高代码可读性和复用性:
func IsNetworkError(err error) bool {
var netErr *net.OpError
return errors.As(err, &netErr)
}
func IsNotFound(err error) bool {
return errors.Is(err, fs.ErrNotExist)
}
这样在业务逻辑中可以直接调用
IsNetworkError(err)
基本上就这些。掌握类型断言、
errors.As
errors.Is
以上就是Golang错误断言方法 类型判断与错误分类的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号