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

Performant gRPC rich error handling in Go

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;
}

并将其作为 top-level 字段包含在任何返回的 message:

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

    // ...

    extraStatusCode = 15;
}

如果发送消息时带有 non-zero extraStatusCode - 则遇到了边缘情况。