zvvq技术分享网

golang 框架的新特性如何增强错误处理机制?(

作者:zvvq博客网
导读go 框架的增强型错误处理特性包括:使用包装器函数添加自定义错误信息。使用 fmt.errorf() 创建更具描述性的错误消息。使用 sentinel 错误终止错误传播。 Go 中框架的增强型错误处理:体

go 框架的加强型错误处理特点包含:应用包装器函数加上自定错误报告。应用 fmt.errorf() 建立更具说明性错误信息。应用 sentinel 错误停止错误散播。 内容来自samhan666

内容来自samhan

Go 中框架的加强型错误处理:体验提升 zvvq.cn

介绍

内容来自samhan

处理错误是所有软件开发过程中的关键部分。Go 架构飞速发展,引进了新的特点,极大地提升了错误处理体制。根据通过这些新特性,您可以创建健硕且靠谱的应用程序。 内容来自zvvq,别采集哟

应用包装器函数(Wrapper Functions)

zvvq好,好zvvq

包装器函数允许您将错误报告导入到目前错误值中。这在跟踪错误由来时非常有利。 copyright zvvq

func handleError(err error) error { copyright zvvq

// 加上自定错误报告

内容来自zvvq,别采集哟

return errors.Wrap(err, "an error occurred while handling the request")

内容来自zvvq,别采集哟

} 内容来自zvvq,别采集哟

应用fmt.Errorf() 内容来自zvvq

fmt.Errorf()函数允许您应用格式字符串和参数创建新的错误值。这可以生成更具说明性错误信息。 zvvq

func parseRequest(req http.Request) (Request, error) { zvvq好,好zvvq

body, err := ioutil.ReadAll(req.Body)

内容来自zvvq,别采集哟

if err != nil { 内容来自zvvq,别采集哟

return nil, fmt.Errorf("failed to read request body: %w", err) zvvq好,好zvvq

}

copyright zvvq

// 分析要求 body,解决编码...

内容来自zvvq,别采集哟

return &Request{ zvvq好,好zvvq

// 已分析的信息...

本文来自zvvq

}, nil

本文来自zvvq

}

内容来自samhan

应用 Sentinel 错误

内容来自samhan

Sentinel错误是一种特殊的错误类型,适合于停止错误散播。这对防止意外错误散播很有用。

copyright zvvq

type MyError struct{} zvvq好,好zvvq

func (e MyError) Error() string { 内容来自samhan

return "sentinel error"

内容来自zvvq,别采集哟

} zvvq

func checkForSentinelError(err error) error {

内容来自zvvq,别采集哟

if errors.Is(err, &MyError{}) { 内容来自samhan

return nil // 阻拦错误散播

内容来自zvvq

}

内容来自zvvq,别采集哟

return err

本文来自zvvq

} 内容来自zvvq,别采集哟

实战案例 zvvq好,好zvvq

错误跟踪 本文来自zvvq

包装器函数适合于跟踪错误的源头:

zvvq好,好zvvq

func createResource(ctx context.Context, name string) (Resource, error) {

zvvq好,好zvvq

// 试着建立资源

内容来自samhan666

resource, err := db.CreateResource(ctx, name) zvvq好,好zvvq

if err != nil {

内容来自zvvq,别采集哟

// 详细描述错误由来

zvvq

return nil, errors.Wrap(err, "failed to create resource") zvvq

} 内容来自samhan

return resource, nil

zvvq.cn

}

本文来自zvvq

错误叙述

zvvq.cn

fmt.Errorf()函数适合于建立更具说明性错误信息:

本文来自zvvq

func saveDocument(ctx context.Context, doc Document) error {

内容来自zvvq,别采集哟

err := db.SaveDocument(ctx, doc)

zvvq.cn

if err != nil {

zvvq好,好zvvq

// 加上文档 ID 以带来更多前后文

内容来自samhan666

returnfmt.Errorf("failedtosavedocumentwith ID %s:%w",doc.ID,err)

内容来自samhan

}

zvvq好,好zvvq

returnnil 本文来自zvvq

}

本文来自zvvq

停止错误散播

内容来自samhan666

Sentinel错误适合于停止错误散播:

本文来自zvvq

func fetchUser(ctx context.Context, id int) (User, error) {

zvvq.cn

user, err := db.GetUser(ctx, id) 内容来自samhan666

if err != nil { copyright zvvq

// 实在找不到客户,则停止错误散播

zvvq好,好zvvq

if errors.Is(err, sql.ErrNoRows) {

内容来自zvvq

return User{}, &MyError{}

zvvq

}

本文来自zvvq

return User{}, err 内容来自samhan

} zvvq

return user, nil 内容来自zvvq,别采集哟

}

zvvq.cn

以上就是golang框架的新特性如何增强错误处理体制?的详细内容,大量请关注其他类似文章!

本文来自zvvq