1. 错误
前言: Go Micro 产生的错误处理和错误
Go Micro 为分布式系统中发生的大多数事物包括错误提供了抽象和类型。通过提供一组核心错误和定义详细错误类型的能力, 我们可以始终如一地了解典型 Go 错误字符串之外发生的情况.
2. 概述
我们定义以下错误类型:
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.
2.1. 使用
让我们假设处理程序中发生了一些错误. 然后, 您应该决定返回哪种错误, 并执行以下操作.
假设提供的某些数据无效
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...
}
}