Search code examples
goprotocol-buffers

Get the enum value out from protobuf messages


Here is a protobuf message definition:

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

I would like to populate the name field based on some strings I created. E.g. in golang:

str := "Cathy"

How can I populate the "name" in the protobuf message?


Solution

  • The Go protobuf generator emits a map of enum names to values (and vice versa). You can use this map to translate your string to enum value:

    str := "Cathy"
    
    value, ok := People_PeopleName_value[str]
    if !ok {
        panic("invalid enum value")
    }
    
    var people People
    people.Name = People_PeopleName(value)