登录
首页 >  Golang >  Go问答

如何在 Go 客户端断言 gRPC 错误代码

来源:stackoverflow

时间:2024-04-07 11:30:35 229浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《如何在 Go 客户端断言 gRPC 错误代码》,聊聊,我们一起来看看吧!

问题内容

给出以下 grpc 服务器端代码:

import (
    "google.golang.org/grpc/codes"
    "google.golang.org/grpc/status"
    ....
)

....

func (s *Router) Assign(ctx context.Context, req *api.Request(*api.Response, error) {

    return nil, status.Errorf(codes.PermissionDenied,
}

....

断言客户端错误为 code = codes.permissiondenied 的推荐技术是什么?


解决方案


假设您的服务器返回 codes.permissiondenined 像这样

...
return nil, status.error(codes.permissiondenied, "permission_denied_text")

如果你的客户端也是golang,也可以使用status库函数fromerror来解析错误。我使用开关来确定返回的错误代码,如下所示

// client
    assignvar, err := s.myfunctioncall(ctx, ...)
    if err != nil {
        if e, ok := status.fromerror(err); ok {
            switch e.code() {
            case codes.permissiondenied:
                fmt.println(e.message()) // this will print permission_denied_test
            case codes.internal:
                fmt.println("has internal error")
            case codes.aborted:
                fmt.println("grpc aborted the call")
            default:
                fmt.println(e.code(), e.message())
            }
        }
        else {
            fmt.printf("not able to parse error returned %v", err)
        }
    }

您还可以使用 status.Code 直接检查错误代码,而无需先获取 status 值。例如:

if err != nil {
    switch status.Code(err) {
    case codes.NotFound:
        // handle not found

    case codes.FailedPrecondition:
        // handle failed precondition

    default:
        // handle other status codes
    }
}

本篇关于《如何在 Go 客户端断言 gRPC 错误代码》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>