从protobuf消息中获取枚举值

drd*_*dot 6 go protocol-buffers

这是一个protobuf消息定义:

message People {
  enum PeopleName {
    Alice = 100;
    Bob = 101;
    Cathy = 102;
  }
  optional PeopleName name = 1;
}
Run Code Online (Sandbox Code Playgroud)

我想根据我创建的一些字符串填充名称字段.例如在golang:

str := "Cathy"
Run Code Online (Sandbox Code Playgroud)

如何填充protobuf消息中的"名称"?

Tim*_*per 14

Go protobuf生成器将枚举名称映射到值(反之亦然).您可以使用此映射将字符串转换为枚举值:

str := "Cathy"

value, ok := People_PeopleName_value[str]
if !ok {
    panic("invalid enum value")
}

var people People
people.Name = People_PeopleName(value).Enum()
Run Code Online (Sandbox Code Playgroud)

  • 从那时起,这个答案就不再使用 `syntax="proto3"` 构建,也不会生成 `Enum()` 方法。您需要从最后一行中删除“.Enum()”。 (3认同)