错误

未匹配的标注
本文档最新版为 3.x,旧版本可能放弃维护,推荐阅读最新版!

错误

前言: Go Micro 产生的错误处理和错误

Go Micro 为分布式系统中发生的大多数事物包括错误提供了抽象和类型。通过提供一组核心错误和定义详细错误类型的能力, 我们可以始终如一地了解典型 Go 错误字符串之外发生的情况.

概述

我们定义以下错误类型:

type Error struct {
    Id     string `json:"id"`
    Code   int32  `json:"code"`
    Detail string `json:"detail"`
    Status string `json:"status"`
}

在系统中, 要求您从处理程序返回错误或从客户端接收错误的任何位置, 都应假定其为 go-micro 错误, 或者应该生成错误. 默认情况下, 我们返回 errors.InternalServerError, 其中某些问题在内部出错及发现超时错误 errors.Timeout.

使用

让我们假设处理程序中发生了一些错误. 然后, 您应该决定返回哪种错误, 并执行以下操作.

假设提供的某些数据无效

return errors.BadRequest("com.example.srv.service", "invalid field")

如果发生内部错误

if err != nil {
    return errors.InternalServerError("com.example.srv.service", "failed to read db: %v", err.Error())
}

现在, 假设您从客户端收到一些错误

pbClient := pb.NewGreeterService("go.micro.srv.greeter", service.Client())
rsp, err := pb.Client(context, req)
if err != nil {
    // parse out the error
    e := errors.Parse(err.Error())

    // inspect the value
    if e.Code == 401 {
        // unauthorised...
    }
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
taadis
讨论数量: 0
发起讨论 只看当前版本


暂无话题~