go 框架的加强型错误处理特点包含:应用包装器函数加上自定错误报告。应用 fmt.errorf() 建立更具说明性错误信息。应用 sentinel 错误停止错误散播。 copyright zvvq
zvvq
Go 中框架的加强型错误处理:体验提升 本文来自zvvq
介绍 zvvq.cn
处理错误是所有软件开发过程中的关键部分。Go 架构飞速发展,引进了新的特点,极大地提升了错误处理体制。根据通过这些新特性,您可以创建健硕且靠谱的应用程序。
内容来自samhan666
应用包装器函数(Wrapper Functions) 内容来自zvvq,别采集哟
包装器函数允许您将错误报告导入到目前错误值中。这在跟踪错误由来时非常有利。
zvvq.cn
func handleError(err error) error {
内容来自samhan
// 加上自定错误报告
return errors.Wrap(err, "an error occurred while handling the request")
zvvq.cn
}
应用fmt.Errorf() zvvq好,好zvvq
fmt.Errorf()函数允许您应用格式字符串和参数创建新的错误值。这可以生成更具说明性错误信息。
本文来自zvvq
func parseRequest(req http.Request) (Request, error) {
zvvq.cn
body, err := ioutil.ReadAll(req.Body)
if err != nil {
return nil, fmt.Errorf("failed to read request body: %w", err) zvvq.cn
} 内容来自zvvq,别采集哟
// 分析要求 body,解决编码...
return &Request{ 内容来自zvvq
// 已分析的信息...
内容来自zvvq
}, nil 内容来自samhan666
} 本文来自zvvq
应用 Sentinel 错误
Sentinel错误是一种特殊的错误类型,适合于停止错误散播。这对防止意外错误散播很有用。 内容来自zvvq,别采集哟
type MyError struct{} copyright zvvq
func (e MyError) Error() string { copyright zvvq
return "sentinel error" 内容来自samhan666
}
func checkForSentinelError(err error) error { copyright zvvq
if errors.Is(err, &MyError{}) {
return nil // 阻拦错误散播
} 内容来自zvvq,别采集哟
return err
}
实战案例 本文来自zvvq
错误跟踪
包装器函数适合于跟踪错误的源头: 本文来自zvvq
func createResource(ctx context.Context, name string) (Resource, error) {
// 试着建立资源
本文来自zvvq
resource, err := db.CreateResource(ctx, name) zvvq好,好zvvq
if err != nil {
// 详细描述错误由来
zvvq.cn
return nil, errors.Wrap(err, "failed to create resource")
} zvvq好,好zvvq
return resource, nil
本文来自zvvq
}
内容来自zvvq
错误叙述
fmt.Errorf()函数适合于建立更具说明性错误信息:
func saveDocument(ctx context.Context, doc Document) error { 内容来自samhan666
err := db.SaveDocument(ctx, doc) 内容来自zvvq,别采集哟
if err != nil { 内容来自zvvq,别采集哟
// 加上文档 ID 以带来更多前后文 内容来自zvvq
returnfmt.Errorf("failedtosavedocumentwith ID %s:%w",doc.ID,err) 本文来自zvvq
} 内容来自zvvq
returnnil 内容来自samhan
}
停止错误散播
Sentinel错误适合于停止错误散播:
func fetchUser(ctx context.Context, id int) (User, error) {
user, err := db.GetUser(ctx, id) 内容来自zvvq
if err != nil { 内容来自zvvq,别采集哟
// 实在找不到客户,则停止错误散播
if errors.Is(err, sql.ErrNoRows) { copyright zvvq
return User{}, &MyError{} 内容来自zvvq
}
内容来自zvvq,别采集哟
return User{}, err 内容来自zvvq
}
zvvq好,好zvvq
return user, nil 内容来自zvvq,别采集哟
} 内容来自zvvq
以上就是golang框架的新特性如何增强错误处理体制?的详细内容,大量请关注其他类似文章!
内容来自zvvq,别采集哟