自定义错误类型只要实现Error() string方法即可满足error接口,能与标准库无缝交互。例如定义MyError结构体并实现Error方法后,可直接返回为error类型,被fmt.Errorf、log.Println等函数正确处理,且支持errors.As提取具体类型和errors.Is判断错误条件,推荐为结构体指针并实现Is方法以增强兼容性。

Go语言中自定义错误类型与标准库的error接口是完全兼容的,只要自定义类型实现了error接口中的Error() string方法。
自定义错误类型的基本实现
在Go中,error是一个内置接口:
type error interface { Error() string}
只要你的类型提供了Error() string方法,它就自动满足error接口。例如:
type MyError struct { Code int Message string}func (e *MyError) Error() string { return fmt.Sprintf("error %d: %s", e.Code, e.Message)}
这个*MyError就可以当作error使用:
立即学习“go语言免费学习笔记(深入)”;
func doSomething() error { return &MyError{Code: 404, Message: "not found"}}
与标准库无缝交互
标准库中所有接收或返回error的地方都可以接受你的自定义错误类型。比如:
fmt.Errorf、log.Println(err) 能正确输出自定义错误的描述 errors.Is 和 errors.As(Go 1.13+)可用于判断和提取具体错误类型 与其他error变量比较或处理时行为一致
推荐做法:支持 errors.As 和 errors.Is
为了让自定义错误更易用,建议支持现代错误处理方式:
如果需要携带额外信息(如错误码、时间戳),实现为结构体指针 使用errors.As提取具体类型:
var myErr *MyErrorif errors.As(err, &myErr) { fmt.Println("code:", myErr.Code)}
若表示特定错误条件,可实现Is方法以配合errors.Is
基本上就这些。只要实现Error() string,你的类型就能在任何期望error的地方使用,和标准库完全兼容。
以上就是Golang自定义错误类型与标准库error兼容吗的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1413415.html
微信扫一扫
支付宝扫一扫