从 protobuf 消息中获取枚举值

Get the enum value out from protobuf messages

这是一个 protobuf 消息定义:

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

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

str := "Cathy"

如何在 protobuf 消息中填充 "name"?

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

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

name.String()