Go中的高性能gRPC丰富错误处理

问题描述

Google文档建议使用以下模型(https://cloud.google.com/apis/design/errors#error_model)在gRPC中发送大量错误,但似乎每次都会将错误字符串发送给用户。我要做的是发送代码,然后在到达客户端时将其映射到字符串。

我想知道的是proto3语言支持写数据的方式,以便我可以在客户端使用它,而无需定义用于将错误代码映射到错误消息的自定义结构。

解决方法

在您的proto定义中,定义一个简单的enum,其中包含任何其他错误代码:

enum extraStatusCode {
    UNKNOWN         = 0;  // not set/used
    TOO_MANY_FOOS   = 1;
    NOT_ENOUGH_BARS = 2;
}

并将其作为所有返回的message中的顶级字段包含:

message User {
    string uid      = 1;
    string email    = 2;

    // ...

    extraStatusCode = 15;
}

如果发送的消息的extraStatusCode非零-则遇到边缘情况。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...