我的原型(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/