Golang自定义错误类型与标准库error兼容吗

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

golang自定义错误类型与标准库error兼容吗

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.Errorflog.Println(err) 能正确输出自定义错误的描述 errors.Iserrors.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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 07:13:11
下一篇 2025年12月16日 07:13:17

相关推荐

发表回复

登录后才能评论
关注微信