错误处理
gRPC 使用标准错误码表示不同类型的错误。
错误码
go
import "google.golang.org/grpc/codes"
import "google.golang.org/grpc/status"
// 返回错误
return nil, status.Error(codes.NotFound, "resource not found")
// 带详情的错误
st := status.New(codes.InvalidArgument, "invalid request")
st, _ = st.WithDetails(&pb.ErrorDetail{Field: "name"})
return nil, st.Err()错误处理
go
resp, err := client.SayHello(ctx, req)
if err != nil {
st, ok := status.FromError(err)
if ok {
switch st.Code() {
case codes.NotFound:
// 处理未找到
case codes.PermissionDenied:
// 处理权限拒绝
case codes.Unavailable:
// 处理服务不可用
}
}
}常用错误码
| 错误码 | 说明 |
|---|---|
| OK | 成功 |
| NotFound | 资源不存在 |
| InvalidArgument | 参数错误 |
| PermissionDenied | 权限拒绝 |
| Unavailable | 服务不可用 |
| DeadlineExceeded | 超时 |