登录
首页 >  Golang >  Go问答

为什么我不能从 grpc 得到非零响应和错误

来源:stackoverflow

时间:2024-04-24 23:42:37 166浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《为什么我不能从 grpc 得到非零响应和错误》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我正在使用 golang 开发 grpc 服务,我观察到如果出现 rpc 错误,我会得到 ​​p>

response = nil 
err = some error

即使我返回一个非零响应以及错误。

但是我也在我的 pb.go 文件中看到:

err := c.cc.Invoke(ctx, "/proto.MyService/Hello", in, out, opts...)
    if err != nil {
        return nil, err
    }
    return out, nil

如果 err 不是 nil ,他们就会做出 nil 响应,我想这就是我得到这样的响应的原因。

我认为出现错误时获得响应是没有意义的,但仍然, 有没有办法可以从 grpc 获得非零响应和错误?


解决方案


原因很简单。 gRPC 是 RPC(远程过程调用)概念的具体实现,其中另一个进程被调用,就好像它是系统的一部分一样。 gRPC 交叉编译为其他语言,包括不支持多个返回值的语言(例如 C++、Java)。生成的客户端不会返回错误,而是抛出异常。因此,除了错误之外,您返回的任何响应都将被忽略,从而降低您的实现的可移植性。

虽然 go 两者都支持,但我们不希望 RPC 根据客户端实现的特定语言产生不同的结果。 pb.go 文件还应该做什么,除了:如果发生错误,所有信息都应该在错误中,如果没有,应该返回响应

如果您仍然需要两者,请丰富您返回的错误。

正如 official documentation 中所述,标准 gRPC 错误是一个代码和一个附加错误字符串。

如果您需要获得某种响应,请使用 rich error model instead 包含响应。例如检查 Pattern for rich error handling in gRPC

好了,本文到此结束,带大家了解了《为什么我不能从 grpc 得到非零响应和错误》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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