从protobuf消息中获取枚举值

时间:2017-05-04 17:58:29

标签: go protocol-buffers

这是protobuf消息定义:

message People {
  enum PeopleName {
    Alice = 100;
    Bob = 101;
    Cathy = 102;
  }
  optional PeopleName name = 1;
}

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

str := "Cathy"

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

2 个答案:

答案 0 :(得分:13)

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()

答案 1 :(得分:2)

使用proto3,从枚举值到字符串,您可以直接使用:

name.String()