go - 原型(prototype)请求中枚举的输入验证

标签 go protocol-buffers proto

我的原型(prototype)文件已定义枚举。这是一个例子

package mypackage;

enum Direction {
    EAST = 1;
    WEST = 2;
    NORTH = 3;
    SOUTH = 4;
}

message SomeActionRequest {
    Direction direction = 1;
}

service SomeService {
    rpc SomeAction (SomeActionRequest) returns (...) { }
}

在实现我的服务方法 (SomeAction) 时,验证输入枚举值 (direction) 是否为有效枚举的最佳方法是什么?

最佳答案

生成的代码将包含一个可用于验证的映射(可能不是最有效的方法,但很简单,并且在枚举更改时不需要更新)。例如:

enum Direction {
  UNKNOWN_DIRECTION = 0;
  EAST = 1;
  WEST = 2;
  NORTH = 3;
  SOUTH = 4;
}

将生成:

var (
    Direction_name = map[int32]string{
        0: "UNKNOWN_DIRECTION",
        1: "EAST",
        2: "WEST",
        3: "NORTH",
        4: "SOUTH",
    }...

所以你可以使用类似的东西(我添加了一个零值以使其有效)。

if input == Direction_UNKNOWN_DIRECTION {
   // missing value
} else if _, ok := Direction_name[input]; !ok {
   /// Not a valid value
}

这是 playground 中的示例.

关于go - 原型(prototype)请求中枚举的输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66329163/

相关文章:

go - 如果请求按值传递,则 http 请求值为空

go - 在单独的go例程中重置计时器

go - 《 Go编程语言》中的一个奇怪问题

loops - 如果永远运行,ticker.C 是否会泄漏内存?

java - Google Protocol 重复值的结构是怎样的?它们的局限性和优势是什么?

node.js - 如何在内容类型为='application/x-protobuf'的node.js中发布数据

c++ - 如何从 google protobuf 消息中的属性名称查找消息类型?

java - Android 和 AppEngine 网络服务 : Json. .. RPC、REST... Protocol Buffer ?

protocol-buffers - 有没有关于如何生成包含经过训练的 TensorFlow 图的 protobuf 文件的示例

rest - GRPC 重复字段不会转码为数组作为 REST API 中的正文参数