Skip to content

错误处理 ​

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超时

参考:https://grpc.io/docs/