Golang中error是内置接口,通过实现Error() string方法表示错误状态,使用errors.New或fmt.Errorf创建错误,支持自定义错误类型携带上下文信息,并可通过fmt.Errorf的%w包装错误形成链式追踪,结合errors.Is和errors.As进行精准错误判断与类型提取,使错误处理明确可控且灵活可靠。

在Golang中,error 是一个内置的接口类型,用于表示错误状态。任何实现了 Error() string 方法的类型都可以作为 error 使用。Go 语言没有异常机制,而是通过返回 error 值来处理错误,这使得错误处理更加明确和可控。
error 接口的基本定义
error 接口非常简单:
type error interface {
Error() string
}
只要一个类型实现了 Error() 方法并返回字符串,就可以作为 error 被使用。
基本的 error 使用方式
最简单的做法是使用标准库中的 errors.New 或 fmt.Errorf 创建错误。
示例:
立即学习“go语言免费学习笔记(深入)”;
package mainimport ("errors""fmt")func divide(a, b float64) (float64, error) {if b == 0 {return 0, errors.New("division by zero")}return a / b, nil}func main() {result, err := divide(10, 0)if err != nil {fmt.Println("Error:", err)return}fmt.Println("Result:", result)}
输出:
Error: division by zero
自定义 error 类型
你可以定义自己的结构体并实现 Error() 方法,以便携带更多信息。
示例:带错误码和时间的自定义 error
package mainimport ("fmt""time")type MyError struct {Code intMessage stringTime time.Time}func (e *MyError) Error() string {return fmt.Sprintf("[ERROR %d] %s at %v", e.Code, e.Message, e.Time)}func doSomething() error {return &MyError{Code: 500,Message: "something went wrong",Time: time.Now(),}}func main() {err := doSomething()if err != nil {fmt.Println(err)// 可以类型断言获取具体信息if myErr, ok := err.(*MyError); ok {fmt.Printf("Code: %d, Msg: %sn", myErr.Code, myErr.Message)}}}
使用 fmt.Errorf 包装错误(Go 1.13+)
从 Go 1.13 开始,fmt.Errorf 支持用 %w 包装原始错误,便于链式追踪。
示例:
立即学习“go语言免费学习笔记(深入)”;
package mainimport ("fmt")func readFile() error {return fmt.Errorf("file not found")}func openConfig() error {err := readFile()return fmt.Errorf("failed to open config: %w", err)}func main() {err := openConfig()if err != nil {fmt.Println("Error:", err)// 判断是否包含某个底层错误if errors.Is(err, fmt.Errorf("file not found")) {fmt.Println("Root cause: file not found")}}}
错误比较与判断
使用 errors.Is 和 errors.As 进行错误判断更安全。errors.Is(err, target):判断 err 是否等于目标错误errors.As(err, &target):判断 err 是否为某自定义类型,并赋值
示例:
立即学习“go语言免费学习笔记(深入)”;
if errors.Is(err, os.ErrNotExist) {fmt.Println("File does not exist")}var myErr *MyErrorif errors.As(err, &myErr) {fmt.Printf("Custom error code: %dn", myErr.Code)}
基本上就这些。Golang 的 error 设计简洁但足够灵活,合理使用能写出清晰可靠的错误处理逻辑。关键在于及时检查错误、恰当包装、必要时自定义类型以便区分不同错误场景。不复杂但容易忽略细节。
以上就是如何在Golang中使用error接口_Golang error接口使用示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1424324.html
微信扫一扫
支付宝扫一扫